1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
5 #include <rte_common.h>
6 #include <rte_hexdump.h>
8 #include <rte_malloc.h>
9 #include <rte_memcpy.h>
10 #include <rte_cycles.h>
12 #include <rte_bus_vdev.h>
14 #include <rte_bbdev.h>
15 #include <rte_bbdev_op.h>
16 #include <rte_bbdev_pmd.h>
21 #define BBDEV_NAME_NULL ("bbdev_null")
23 struct bbdev_testsuite_params
{
24 struct rte_bbdev_queue_conf qconf
;
27 static struct bbdev_testsuite_params testsuite_params
;
29 static uint8_t null_dev_id
;
36 char buf
[RTE_BBDEV_NAME_MAX_LEN
];
38 /* Create test device */
39 snprintf(buf
, sizeof(buf
), "%s_unittest", BBDEV_NAME_NULL
);
40 ret
= rte_vdev_init(buf
, NULL
);
41 TEST_ASSERT(ret
== 0, "Failed to create instance of pmd: %s", buf
);
43 nb_devs
= rte_bbdev_count();
44 TEST_ASSERT(nb_devs
!= 0, "No devices found");
46 /* Most recently created device is our device */
47 null_dev_id
= nb_devs
- 1;
53 testsuite_teardown(void)
55 char buf
[RTE_BBDEV_NAME_MAX_LEN
];
57 snprintf(buf
, sizeof(buf
), "%s_unittest", BBDEV_NAME_NULL
);
64 struct bbdev_testsuite_params
*ts_params
= &testsuite_params
;
67 /* Valid queue configuration */
68 ts_params
->qconf
.priority
= 0;
69 ts_params
->qconf
.socket
= SOCKET_ID_ANY
;
70 ts_params
->qconf
.deferred_start
= 1;
73 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(null_dev_id
, num_queues
,
74 SOCKET_ID_ANY
), "Failed to setup queues for bbdev %u",
77 /* Start the device */
78 TEST_ASSERT_SUCCESS(rte_bbdev_start(null_dev_id
),
79 "Failed to start bbdev %u", 0);
87 rte_bbdev_close(null_dev_id
);
91 test_bbdev_configure_invalid_dev_id(void)
97 for (dev_id
= 0; dev_id
< RTE_BBDEV_MAX_DEVS
; dev_id
++) {
98 if (!rte_bbdev_is_valid(dev_id
)) {
99 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id
,
100 num_queues
, SOCKET_ID_ANY
),
101 "Failed test for rte_bbdev_setup_queues: "
102 "invalid dev_num %u", dev_id
);
103 TEST_ASSERT(rte_bbdev_intr_enable(dev_id
) == -ENODEV
,
104 "Failed test for rte_bbdev_intr_enable: "
105 "invalid dev_num %u", dev_id
);
114 test_bbdev_configure_invalid_num_queues(void)
116 struct rte_bbdev_info info
;
117 uint8_t dev_id
, num_devs
;
121 TEST_ASSERT((num_devs
= rte_bbdev_count()) >= 1,
122 "Need at least %d devices for test", 1);
124 /* valid num_queues values */
127 /* valid dev_id values */
128 dev_id
= null_dev_id
;
130 /* Stop the device in case it's started so it can be configured */
131 rte_bbdev_stop(dev_id
);
133 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id
, 0, SOCKET_ID_ANY
),
134 "Failed test for rte_bbdev_setup_queues: "
135 "invalid num_queues %d", 0);
137 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id
, num_queues
,
139 "Failed test for rte_bbdev_setup_queues: "
140 "invalid dev_num %u", dev_id
);
142 TEST_ASSERT_FAIL(return_value
= rte_bbdev_info_get(dev_id
, NULL
),
143 "Failed test for rte_bbdev_info_get: "
144 "returned value:%i", return_value
);
146 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_info_get(dev_id
, &info
),
147 "Failed test for rte_bbdev_info_get: "
148 "invalid return value:%i", return_value
);
150 TEST_ASSERT(info
.num_queues
== num_queues
,
151 "Failed test for rte_bbdev_info_get: "
152 "invalid num_queues:%u", info
.num_queues
);
154 num_queues
= info
.drv
.max_num_queues
;
155 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id
, num_queues
,
157 "Failed test for rte_bbdev_setup_queues: "
158 "invalid num_queues: %u", num_queues
);
161 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id
, num_queues
,
163 "Failed test for rte_bbdev_setup_queues: "
164 "invalid num_queues: %u", num_queues
);
170 test_bbdev_configure_stop_device(void)
172 struct rte_bbdev_info info
;
176 /* valid dev_id values */
177 dev_id
= null_dev_id
;
179 /* Stop the device so it can be configured */
180 rte_bbdev_stop(dev_id
);
182 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_info_get(dev_id
, &info
),
183 "Failed test for rte_bbdev_info_get: "
184 "invalid return value from "
185 "rte_bbdev_info_get function: %i", return_value
);
187 TEST_ASSERT_SUCCESS(info
.started
, "Failed test for rte_bbdev_info_get: "
188 "started value: %u", info
.started
);
190 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id
,
191 info
.drv
.max_num_queues
, SOCKET_ID_ANY
),
192 "Failed test for rte_bbdev_setup_queues: "
193 "device should be stopped, dev_id: %u", dev_id
);
195 return_value
= rte_bbdev_intr_enable(dev_id
);
196 TEST_ASSERT(return_value
!= -EBUSY
,
197 "Failed test for rte_bbdev_intr_enable: device should be stopped, dev_id: %u",
200 /* Start the device so it cannot be configured */
201 TEST_ASSERT_FAIL(rte_bbdev_start(RTE_BBDEV_MAX_DEVS
),
202 "Failed to start bbdev %u", dev_id
);
204 TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id
),
205 "Failed to start bbdev %u", dev_id
);
207 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_info_get(dev_id
, &info
),
208 "Failed test for rte_bbdev_info_get: "
209 "invalid return value from "
210 "rte_bbdev_info_get function: %i", return_value
);
212 TEST_ASSERT_FAIL(info
.started
, "Failed test for rte_bbdev_info_get: "
213 "started value: %u", info
.started
);
215 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id
,
216 info
.drv
.max_num_queues
, SOCKET_ID_ANY
),
217 "Failed test for rte_bbdev_setup_queues: "
218 "device should be started, dev_id: %u", dev_id
);
220 return_value
= rte_bbdev_intr_enable(dev_id
);
221 TEST_ASSERT(return_value
== -EBUSY
,
222 "Failed test for rte_bbdev_intr_enable: device should be started, dev_id: %u",
225 /* Stop again the device so it can be once again configured */
226 TEST_ASSERT_FAIL(rte_bbdev_stop(RTE_BBDEV_MAX_DEVS
),
227 "Failed to start bbdev %u", dev_id
);
229 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id
), "Failed to stop bbdev %u",
232 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_info_get(dev_id
, &info
),
233 "Failed test for rte_bbdev_info_get: "
234 "invalid return value from "
235 "rte_bbdev_info_get function: %i", return_value
);
237 TEST_ASSERT_SUCCESS(info
.started
, "Failed test for rte_bbdev_info_get: "
238 "started value: %u", info
.started
);
240 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id
,
241 info
.drv
.max_num_queues
, SOCKET_ID_ANY
),
242 "Failed test for rte_bbdev_setup_queues: "
243 "device should be stopped, dev_id: %u", dev_id
);
245 return_value
= rte_bbdev_intr_enable(dev_id
);
246 TEST_ASSERT(return_value
!= -EBUSY
,
247 "Failed test for rte_bbdev_intr_enable: device should be stopped, dev_id: %u",
254 test_bbdev_configure_stop_queue(void)
256 struct bbdev_testsuite_params
*ts_params
= &testsuite_params
;
257 struct rte_bbdev_info info
;
258 struct rte_bbdev_queue_info qinfo
;
263 /* Valid dev_id values */
264 dev_id
= null_dev_id
;
266 /* Valid queue_id values */
269 rte_bbdev_stop(dev_id
);
270 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_info_get(dev_id
, &info
),
271 "Failed test for rte_bbdev_info_get: "
272 "invalid return value:%i", return_value
);
274 /* Valid queue configuration */
275 ts_params
->qconf
.queue_size
= info
.drv
.queue_size_lim
;
276 ts_params
->qconf
.priority
= info
.drv
.max_ul_queue_priority
;
278 /* Device - started; queue - started */
279 rte_bbdev_start(dev_id
);
281 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
283 "Failed test for rte_bbdev_queue_configure: "
284 "queue:%u on device:%u should be stopped",
287 /* Device - stopped; queue - started */
288 rte_bbdev_stop(dev_id
);
290 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
292 "Failed test for rte_bbdev_queue_configure: "
293 "queue:%u on device:%u should be stopped",
296 TEST_ASSERT_FAIL(rte_bbdev_queue_stop(RTE_BBDEV_MAX_DEVS
, queue_id
),
297 "Failed test for rte_bbdev_queue_stop "
300 TEST_ASSERT_FAIL(rte_bbdev_queue_stop(dev_id
, RTE_MAX_QUEUES_PER_PORT
),
301 "Failed test for rte_bbdev_queue_stop "
302 "invalid queue_id ");
304 /* Device - stopped; queue - stopped */
305 rte_bbdev_queue_stop(dev_id
, queue_id
);
307 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id
, queue_id
,
309 "Failed test for rte_bbdev_queue_configure: "
310 "queue:%u on device:%u should be stopped", queue_id
,
313 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_queue_info_get(dev_id
,
315 "Failed test for rte_bbdev_info_get: "
316 "invalid return value from "
317 "rte_bbdev_queue_info_get function: %i", return_value
);
319 TEST_ASSERT(qinfo
.conf
.socket
== ts_params
->qconf
.socket
,
320 "Failed test for rte_bbdev_queue_info_get: "
321 "invalid queue_size:%u", qinfo
.conf
.socket
);
323 TEST_ASSERT(qinfo
.conf
.queue_size
== ts_params
->qconf
.queue_size
,
324 "Failed test for rte_bbdev_queue_info_get: "
325 "invalid queue_size:%u", qinfo
.conf
.queue_size
);
327 TEST_ASSERT(qinfo
.conf
.priority
== ts_params
->qconf
.priority
,
328 "Failed test for rte_bbdev_queue_info_get: "
329 "invalid queue_size:%u", qinfo
.conf
.priority
);
331 TEST_ASSERT(qinfo
.conf
.deferred_start
==
332 ts_params
->qconf
.deferred_start
,
333 "Failed test for rte_bbdev_queue_info_get: "
334 "invalid queue_size:%u", qinfo
.conf
.deferred_start
);
336 /* Device - started; queue - stopped */
337 rte_bbdev_start(dev_id
);
338 rte_bbdev_queue_stop(dev_id
, queue_id
);
340 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
342 "Failed test for rte_bbdev_queue_configure: "
343 "queue:%u on device:%u should be stopped", queue_id
,
346 rte_bbdev_stop(dev_id
);
348 /* After rte_bbdev_start(dev_id):
349 * - queue should be still stopped if deferred_start ==
351 rte_bbdev_start(dev_id
);
353 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_queue_info_get(dev_id
,
355 "Failed test for rte_bbdev_info_get: "
356 "invalid return value from "
357 "rte_bbdev_queue_info_get function: %i", return_value
);
359 TEST_ASSERT(qinfo
.started
== 0,
360 "Failed test for rte_bbdev_queue_info_get: "
361 "invalid value for qinfo.started:%u", qinfo
.started
);
363 rte_bbdev_stop(dev_id
);
365 /* After rte_bbdev_start(dev_id):
366 * - queue should be started if deferred_start ==
368 ts_params
->qconf
.deferred_start
= 0;
369 rte_bbdev_queue_configure(dev_id
, queue_id
, &ts_params
->qconf
);
370 rte_bbdev_start(dev_id
);
372 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_queue_info_get(dev_id
,
374 "Failed test for rte_bbdev_info_get: "
375 "invalid return value from "
376 "rte_bbdev_queue_info_get function: %i", return_value
);
378 TEST_ASSERT(qinfo
.started
== 1,
379 "Failed test for rte_bbdev_queue_info_get: "
380 "invalid value for qinfo.started:%u", qinfo
.started
);
386 test_bbdev_configure_invalid_queue_configure(void)
388 struct bbdev_testsuite_params
*ts_params
= &testsuite_params
;
390 struct rte_bbdev_info info
;
394 /* Valid dev_id values */
395 dev_id
= null_dev_id
;
397 /* Valid queue_id values */
400 rte_bbdev_stop(dev_id
);
402 TEST_ASSERT_SUCCESS(return_value
= rte_bbdev_info_get(dev_id
, &info
),
403 "Failed test for rte_bbdev_info_get: "
404 "invalid return value:%i", return_value
);
406 rte_bbdev_queue_stop(dev_id
, queue_id
);
408 ts_params
->qconf
.queue_size
= info
.drv
.queue_size_lim
+ 1;
409 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
411 "Failed test for rte_bbdev_queue_configure: "
412 "invalid value qconf.queue_size: %u",
413 ts_params
->qconf
.queue_size
);
415 ts_params
->qconf
.queue_size
= info
.drv
.queue_size_lim
;
416 ts_params
->qconf
.priority
= info
.drv
.max_ul_queue_priority
;
417 queue_id
= info
.num_queues
;
418 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
420 "Failed test for rte_bbdev_queue_configure: "
421 "invalid value queue_id: %u", queue_id
);
424 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id
, queue_id
, NULL
),
425 "Failed test for rte_bbdev_queue_configure: "
426 "NULL qconf structure ");
428 ts_params
->qconf
.socket
= RTE_MAX_NUMA_NODES
;
429 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
431 "Failed test for rte_bbdev_queue_configure: "
432 "invalid socket number ");
434 ts_params
->qconf
.socket
= SOCKET_ID_ANY
;
435 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id
, queue_id
,
437 "Failed test for rte_bbdev_queue_configure: "
438 "invalid value qconf.queue_size: %u",
439 ts_params
->qconf
.queue_size
);
441 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(RTE_BBDEV_MAX_DEVS
, queue_id
,
443 "Failed test for rte_bbdev_queue_configure: "
446 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id
, queue_id
, NULL
),
447 "Failed test for rte_bbdev_queue_configure: "
448 "invalid value qconf.queue_size: %u",
449 ts_params
->qconf
.queue_size
);
455 test_bbdev_op_pool(void)
457 struct rte_mempool
*mp
;
459 unsigned int dec_size
= sizeof(struct rte_bbdev_dec_op
);
460 unsigned int enc_size
= sizeof(struct rte_bbdev_enc_op
);
462 const char *pool_dec
= "Test_DEC";
463 const char *pool_enc
= "Test_ENC";
465 /* Valid pool configuration */
467 uint32_t cache_size
= 128;
469 TEST_ASSERT(rte_bbdev_op_pool_create(NULL
,
470 RTE_BBDEV_OP_TURBO_DEC
, size
, cache_size
, 0) == NULL
,
471 "Failed test for rte_bbdev_op_pool_create: "
472 "NULL name parameter");
474 TEST_ASSERT((mp
= rte_bbdev_op_pool_create(pool_dec
,
475 RTE_BBDEV_OP_TURBO_DEC
, size
, cache_size
, 0)) != NULL
,
476 "Failed test for rte_bbdev_op_pool_create: "
477 "returned value is empty");
479 TEST_ASSERT(mp
->size
== size
,
480 "Failed test for rte_bbdev_op_pool_create: "
481 "invalid size of the mempool, mp->size: %u", mp
->size
);
483 TEST_ASSERT(mp
->cache_size
== cache_size
,
484 "Failed test for rte_bbdev_op_pool_create: "
485 "invalid size of the mempool, mp->size: %u",
488 TEST_ASSERT_SUCCESS(strcmp(mp
->name
, pool_dec
),
489 "Failed test for rte_bbdev_op_pool_create: "
490 "invalid name of mempool, mp->name: %s", mp
->name
);
492 TEST_ASSERT(mp
->elt_size
== dec_size
,
493 "Failed test for rte_bbdev_op_pool_create: "
494 "invalid element size for RTE_BBDEV_OP_TURBO_DEC, "
495 "mp->elt_size: %u", mp
->elt_size
);
497 rte_mempool_free(mp
);
499 TEST_ASSERT((mp
= rte_bbdev_op_pool_create(pool_enc
,
500 RTE_BBDEV_OP_TURBO_ENC
, size
, cache_size
, 0)) != NULL
,
501 "Failed test for rte_bbdev_op_pool_create: "
502 "returned value is empty");
504 TEST_ASSERT(mp
->elt_size
== enc_size
,
505 "Failed test for rte_bbdev_op_pool_create: "
506 "invalid element size for RTE_BBDEV_OP_TURBO_ENC, "
507 "mp->elt_size: %u", mp
->elt_size
);
509 rte_mempool_free(mp
);
511 TEST_ASSERT((mp
= rte_bbdev_op_pool_create("Test_NONE",
512 RTE_BBDEV_OP_NONE
, size
, cache_size
, 0)) != NULL
,
513 "Failed test for rte_bbdev_op_pool_create: "
514 "returned value is empty for RTE_BBDEV_OP_NONE");
516 TEST_ASSERT(mp
->elt_size
== (enc_size
> dec_size
? enc_size
: dec_size
),
517 "Failed test for rte_bbdev_op_pool_create: "
518 "invalid size for RTE_BBDEV_OP_NONE, mp->elt_size: %u",
521 rte_mempool_free(mp
);
523 TEST_ASSERT((mp
= rte_bbdev_op_pool_create("Test_INV",
524 RTE_BBDEV_OP_TYPE_COUNT
, size
, cache_size
, 0)) == NULL
,
525 "Failed test for rte_bbdev_op_pool_create: "
526 "returned value is not NULL for invalid type");
528 /* Invalid pool configuration */
532 TEST_ASSERT((mp
= rte_bbdev_op_pool_create("Test_InvSize",
533 RTE_BBDEV_OP_NONE
, size
, cache_size
, 0)) == NULL
,
534 "Failed test for rte_bbdev_op_pool_create: "
535 "returned value should be empty "
536 "because size of per-lcore local cache "
537 "is greater than size of the mempool.");
543 * Create pool of OP types RTE_BBDEV_OP_NONE, RTE_BBDEV_OP_TURBO_DEC and
544 * RTE_BBDEV_OP_TURBO_ENC and check that only ops of that type can be
548 test_bbdev_op_type(void)
550 struct rte_mempool
*mp_dec
;
552 const unsigned int OPS_COUNT
= 32;
553 struct rte_bbdev_dec_op
*dec_ops_arr
[OPS_COUNT
];
554 struct rte_bbdev_enc_op
*enc_ops_arr
[OPS_COUNT
];
556 const char *pool_dec
= "Test_op_dec";
558 /* Valid pool configuration */
559 uint32_t num_elements
= 256;
560 uint32_t cache_size
= 128;
562 /* mempool type : RTE_BBDEV_OP_TURBO_DEC */
563 mp_dec
= rte_bbdev_op_pool_create(pool_dec
,
564 RTE_BBDEV_OP_TURBO_DEC
, num_elements
, cache_size
, 0);
565 TEST_ASSERT(mp_dec
!= NULL
, "Failed to create %s mempool", pool_dec
);
567 TEST_ASSERT(rte_bbdev_dec_op_alloc_bulk(mp_dec
, dec_ops_arr
, 1) == 0,
568 "Failed test for rte_bbdev_op_alloc_bulk TURBO_DEC: "
569 "OPs type: RTE_BBDEV_OP_TURBO_DEC");
571 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_dec
, enc_ops_arr
, 1) != 0,
572 "Failed test for rte_bbdev_op_alloc_bulk TURBO_DEC: "
573 "OPs type: RTE_BBDEV_OP_TURBO_ENC");
575 rte_mempool_free(mp_dec
);
581 test_bbdev_op_pool_size(void)
583 struct rte_mempool
*mp_none
;
585 const unsigned int OPS_COUNT
= 128;
586 struct rte_bbdev_enc_op
*ops_enc_arr
[OPS_COUNT
];
587 struct rte_bbdev_enc_op
*ops_ext_arr
[OPS_COUNT
];
588 struct rte_bbdev_enc_op
*ops_ext2_arr
[OPS_COUNT
];
590 const char *pool_none
= "Test_pool_size";
592 /* Valid pool configuration */
593 uint32_t num_elements
= 256;
594 uint32_t cache_size
= 0;
596 /* Create mempool type : RTE_BBDEV_OP_TURBO_ENC, size : 256 */
597 mp_none
= rte_bbdev_op_pool_create(pool_none
, RTE_BBDEV_OP_TURBO_ENC
,
598 num_elements
, cache_size
, 0);
599 TEST_ASSERT(mp_none
!= NULL
, "Failed to create %s mempool", pool_none
);
601 /* Add 128 RTE_BBDEV_OP_TURBO_ENC ops */
602 rte_bbdev_enc_op_alloc_bulk(mp_none
, ops_enc_arr
, OPS_COUNT
);
604 /* Add 128 RTE_BBDEV_OP_TURBO_ENC ops */
605 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none
, ops_ext_arr
,
607 "Failed test for allocating bbdev ops: "
608 "Mempool size: 256, Free : 128, Attempted to add: 128");
610 /* Try adding 128 more RTE_BBDEV_OP_TURBO_ENC ops, this should fail */
611 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none
, ops_ext2_arr
,
613 "Failed test for allocating bbdev ops: "
614 "Mempool size: 256, Free : 0, Attempted to add: 128");
616 /* Free-up 128 RTE_BBDEV_OP_TURBO_ENC ops */
617 rte_bbdev_enc_op_free_bulk(ops_enc_arr
, OPS_COUNT
);
619 /* Try adding 128 RTE_BBDEV_OP_TURBO_DEC ops, this should succeed */
620 /* Cache size > 0 causes reallocation of ops size > 127 fail */
621 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none
, ops_ext2_arr
,
623 "Failed test for allocating ops after mempool freed: "
624 "Mempool size: 256, Free : 128, Attempted to add: 128");
626 rte_mempool_free(mp_none
);
632 test_bbdev_count(void)
634 uint8_t num_devs
, num_valid_devs
= 0;
636 for (num_devs
= 0; num_devs
< RTE_BBDEV_MAX_DEVS
; num_devs
++) {
637 if (rte_bbdev_is_valid(num_devs
))
641 num_devs
= rte_bbdev_count();
642 TEST_ASSERT(num_valid_devs
== num_devs
,
643 "Failed test for rte_bbdev_is_valid: "
644 "invalid num_devs %u ", num_devs
);
650 test_bbdev_stats(void)
652 uint8_t dev_id
= null_dev_id
;
653 uint16_t queue_id
= 0;
654 struct rte_bbdev_dec_op
*dec_ops
[4096] = { 0 };
655 struct rte_bbdev_dec_op
*dec_proc_ops
[4096] = { 0 };
656 struct rte_bbdev_enc_op
*enc_ops
[4096] = { 0 };
657 struct rte_bbdev_enc_op
*enc_proc_ops
[4096] = { 0 };
658 uint16_t num_ops
= 236;
659 struct rte_bbdev_stats stats
;
660 struct bbdev_testsuite_params
*ts_params
= &testsuite_params
;
662 TEST_ASSERT_SUCCESS(rte_bbdev_queue_stop(dev_id
, queue_id
),
663 "Failed to stop queue %u on device %u ", queue_id
,
665 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id
),
666 "Failed to stop bbdev %u ", dev_id
);
668 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id
, queue_id
,
670 "Failed to configure queue %u on device %u ",
673 TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id
),
674 "Failed to start bbdev %u ", dev_id
);
676 TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id
, queue_id
),
677 "Failed to start queue %u on device %u ", queue_id
,
680 TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id
, queue_id
),
681 "Failed to start queue %u on device %u ", queue_id
,
684 /* Tests after enqueue operation */
685 rte_bbdev_enqueue_enc_ops(dev_id
, queue_id
, enc_ops
, num_ops
);
686 rte_bbdev_enqueue_dec_ops(dev_id
, queue_id
, dec_ops
, num_ops
);
688 TEST_ASSERT_FAIL(rte_bbdev_stats_get(RTE_BBDEV_MAX_DEVS
, &stats
),
689 "Failed test for rte_bbdev_stats_get on device %u ",
692 TEST_ASSERT_FAIL(rte_bbdev_stats_get(dev_id
, NULL
),
693 "Failed test for rte_bbdev_stats_get on device %u ",
696 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id
, &stats
),
697 "Failed test for rte_bbdev_stats_get on device %u ",
700 TEST_ASSERT(stats
.enqueued_count
== 2 * num_ops
,
701 "Failed test for rte_bbdev_enqueue_ops: "
702 "invalid enqueued_count %" PRIu64
" ",
703 stats
.enqueued_count
);
705 TEST_ASSERT(stats
.dequeued_count
== 0,
706 "Failed test for rte_bbdev_stats_reset: "
707 "invalid dequeued_count %" PRIu64
" ",
708 stats
.dequeued_count
);
710 /* Tests after dequeue operation */
711 rte_bbdev_dequeue_enc_ops(dev_id
, queue_id
, enc_proc_ops
, num_ops
);
712 rte_bbdev_dequeue_dec_ops(dev_id
, queue_id
, dec_proc_ops
, num_ops
);
714 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id
, &stats
),
715 "Failed test for rte_bbdev_stats_get on device %u ",
718 TEST_ASSERT(stats
.dequeued_count
== 2 * num_ops
,
719 "Failed test for rte_bbdev_dequeue_ops: "
720 "invalid enqueued_count %" PRIu64
" ",
721 stats
.dequeued_count
);
723 TEST_ASSERT(stats
.enqueue_err_count
== 0,
724 "Failed test for rte_bbdev_stats_reset: "
725 "invalid enqueue_err_count %" PRIu64
" ",
726 stats
.enqueue_err_count
);
728 TEST_ASSERT(stats
.dequeue_err_count
== 0,
729 "Failed test for rte_bbdev_stats_reset: "
730 "invalid dequeue_err_count %" PRIu64
" ",
731 stats
.dequeue_err_count
);
733 /* Tests after reset operation */
734 TEST_ASSERT_FAIL(rte_bbdev_stats_reset(RTE_BBDEV_MAX_DEVS
),
735 "Failed to reset statistic for device %u ", dev_id
);
737 TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id
),
738 "Failed to reset statistic for device %u ", dev_id
);
739 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id
, &stats
),
740 "Failed test for rte_bbdev_stats_get on device %u ",
743 TEST_ASSERT(stats
.enqueued_count
== 0,
744 "Failed test for rte_bbdev_stats_reset: "
745 "invalid enqueued_count %" PRIu64
" ",
746 stats
.enqueued_count
);
748 TEST_ASSERT(stats
.dequeued_count
== 0,
749 "Failed test for rte_bbdev_stats_reset: "
750 "invalid dequeued_count %" PRIu64
" ",
751 stats
.dequeued_count
);
753 TEST_ASSERT(stats
.enqueue_err_count
== 0,
754 "Failed test for rte_bbdev_stats_reset: "
755 "invalid enqueue_err_count %" PRIu64
" ",
756 stats
.enqueue_err_count
);
758 TEST_ASSERT(stats
.dequeue_err_count
== 0,
759 "Failed test for rte_bbdev_stats_reset: "
760 "invalid dequeue_err_count %" PRIu64
" ",
761 stats
.dequeue_err_count
);
767 test_bbdev_driver_init(void)
769 struct rte_bbdev
*dev1
, *dev2
;
770 const char *name
= "dev_name";
772 int num_devs
, num_devs_tmp
;
774 dev1
= rte_bbdev_allocate(NULL
);
775 TEST_ASSERT(dev1
== NULL
,
776 "Failed initialize bbdev driver with NULL name");
778 dev1
= rte_bbdev_allocate(name
);
779 TEST_ASSERT(dev1
!= NULL
, "Failed to initialize bbdev driver");
781 dev2
= rte_bbdev_allocate(name
);
782 TEST_ASSERT(dev2
== NULL
,
783 "Failed to initialize bbdev driver: "
784 "driver with the same name has been initialized before");
786 num_devs
= rte_bbdev_count() - 1;
787 num_devs_tmp
= num_devs
;
789 /* Initialize the maximum amount of devices */
791 sprintf(name_tmp
, "%s%i", "name_", num_devs
);
792 dev2
= rte_bbdev_allocate(name_tmp
);
793 TEST_ASSERT(dev2
!= NULL
,
794 "Failed to initialize bbdev driver");
796 } while (num_devs
< (RTE_BBDEV_MAX_DEVS
- 1));
798 sprintf(name_tmp
, "%s%i", "name_", num_devs
);
799 dev2
= rte_bbdev_allocate(name_tmp
);
800 TEST_ASSERT(dev2
== NULL
, "Failed to initialize bbdev driver number %d "
801 "more drivers than RTE_BBDEV_MAX_DEVS: %d ", num_devs
,
806 while (num_devs
>= num_devs_tmp
) {
807 sprintf(name_tmp
, "%s%i", "name_", num_devs
);
808 dev2
= rte_bbdev_get_named_dev(name_tmp
);
809 TEST_ASSERT_SUCCESS(rte_bbdev_release(dev2
),
810 "Failed to uninitialize bbdev driver %s ",
815 TEST_ASSERT(dev1
->data
->dev_id
< RTE_BBDEV_MAX_DEVS
,
816 "Failed test rte_bbdev_allocate: "
817 "invalid dev_id %" PRIu8
", max number of devices %d ",
818 dev1
->data
->dev_id
, RTE_BBDEV_MAX_DEVS
);
820 TEST_ASSERT(dev1
->state
== RTE_BBDEV_INITIALIZED
,
821 "Failed test rte_bbdev_allocate: "
822 "invalid state %d (0 - RTE_BBDEV_UNUSED, 1 - RTE_BBDEV_INITIALIZED",
825 TEST_ASSERT_FAIL(rte_bbdev_release(NULL
),
826 "Failed to uninitialize bbdev driver with NULL bbdev");
828 sprintf(name_tmp
, "%s", "invalid_name");
829 dev2
= rte_bbdev_get_named_dev(name_tmp
);
830 TEST_ASSERT_FAIL(rte_bbdev_release(dev2
),
831 "Failed to uninitialize bbdev driver with invalid name");
833 dev2
= rte_bbdev_get_named_dev(name
);
834 TEST_ASSERT_SUCCESS(rte_bbdev_release(dev2
),
835 "Failed to uninitialize bbdev driver: %s ", name
);
841 event_callback(uint16_t dev_id
, enum rte_bbdev_event_type type
, void *param
,
844 RTE_SET_USED(dev_id
);
845 RTE_SET_USED(ret_param
);
850 if (type
== RTE_BBDEV_EVENT_UNKNOWN
||
851 type
== RTE_BBDEV_EVENT_ERROR
||
852 type
== RTE_BBDEV_EVENT_MAX
)
853 *(int *)param
= type
;
857 test_bbdev_callback(void)
859 struct rte_bbdev
*dev1
, *dev2
;
860 const char *name
= "dev_name1";
861 const char *name2
= "dev_name2";
863 uint8_t invalid_dev_id
= RTE_BBDEV_MAX_DEVS
;
864 enum rte_bbdev_event_type invalid_event_type
= RTE_BBDEV_EVENT_MAX
;
867 dev1
= rte_bbdev_allocate(name
);
868 TEST_ASSERT(dev1
!= NULL
, "Failed to initialize bbdev driver");
871 * RTE_BBDEV_EVENT_UNKNOWN - unregistered
872 * RTE_BBDEV_EVENT_ERROR - unregistered
875 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
876 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_ERROR
, NULL
);
877 TEST_ASSERT(event_status
== -1,
878 "Failed test for rte_bbdev_pmd_callback_process: "
879 "events were not registered ");
881 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1
->data
->dev_id
,
882 RTE_BBDEV_EVENT_MAX
, event_callback
, NULL
),
883 "Failed to callback register for RTE_BBDEV_EVENT_MAX ");
885 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1
->data
->dev_id
,
886 RTE_BBDEV_EVENT_MAX
, event_callback
, NULL
),
887 "Failed to unregister RTE_BBDEV_EVENT_MAX ");
890 * RTE_BBDEV_EVENT_UNKNOWN - registered
891 * RTE_BBDEV_EVENT_ERROR - unregistered
893 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1
->data
->dev_id
,
894 RTE_BBDEV_EVENT_UNKNOWN
, event_callback
, &event_status
),
895 "Failed to callback rgstr for RTE_BBDEV_EVENT_UNKNOWN");
897 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
898 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_UNKNOWN
,
899 "Failed test for rte_bbdev_pmd_callback_process "
900 "for RTE_BBDEV_EVENT_UNKNOWN ");
902 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_ERROR
, NULL
);
903 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_UNKNOWN
,
904 "Failed test for rte_bbdev_pmd_callback_process: "
905 "event RTE_BBDEV_EVENT_ERROR was not registered ");
908 * RTE_BBDEV_EVENT_UNKNOWN - registered
909 * RTE_BBDEV_EVENT_ERROR - registered
911 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1
->data
->dev_id
,
912 RTE_BBDEV_EVENT_ERROR
, event_callback
, &event_status
),
913 "Failed to callback rgstr for RTE_BBDEV_EVENT_ERROR ");
915 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1
->data
->dev_id
,
916 RTE_BBDEV_EVENT_ERROR
, event_callback
, &event_status
),
917 "Failed to callback register for RTE_BBDEV_EVENT_ERROR"
918 "(re-registration) ");
921 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
922 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_UNKNOWN
,
923 "Failed test for rte_bbdev_pmd_callback_process "
924 "for RTE_BBDEV_EVENT_UNKNOWN ");
926 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_ERROR
, NULL
);
927 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_ERROR
,
928 "Failed test for rte_bbdev_pmd_callback_process "
929 "for RTE_BBDEV_EVENT_ERROR ");
932 * RTE_BBDEV_EVENT_UNKNOWN - registered
933 * RTE_BBDEV_EVENT_ERROR - unregistered
935 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev1
->data
->dev_id
,
936 RTE_BBDEV_EVENT_ERROR
, event_callback
, &event_status
),
937 "Failed to unregister RTE_BBDEV_EVENT_ERROR ");
940 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
941 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_UNKNOWN
,
942 "Failed test for rte_bbdev_pmd_callback_process "
943 "for RTE_BBDEV_EVENT_UNKNOWN ");
945 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_ERROR
, NULL
);
946 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_UNKNOWN
,
947 "Failed test for rte_bbdev_pmd_callback_process: "
948 "event RTE_BBDEV_EVENT_ERROR was unregistered ");
950 /* rte_bbdev_callback_register with invalid inputs */
951 TEST_ASSERT_FAIL(rte_bbdev_callback_register(invalid_dev_id
,
952 RTE_BBDEV_EVENT_ERROR
, event_callback
, &event_status
),
953 "Failed test for rte_bbdev_callback_register "
954 "for invalid_dev_id ");
956 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1
->data
->dev_id
,
957 invalid_event_type
, event_callback
, &event_status
),
958 "Failed to callback register for invalid event type ");
960 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1
->data
->dev_id
,
961 RTE_BBDEV_EVENT_ERROR
, NULL
, &event_status
),
962 "Failed to callback register - no callback function ");
964 /* The impact of devices on each other */
965 dev2
= rte_bbdev_allocate(name2
);
966 TEST_ASSERT(dev2
!= NULL
,
967 "Failed to initialize bbdev driver");
971 * RTE_BBDEV_EVENT_UNKNOWN - unregistered
972 * RTE_BBDEV_EVENT_ERROR - unregistered
975 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
976 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_ERROR
, NULL
);
977 TEST_ASSERT(event_status
== -1,
978 "Failed test for rte_bbdev_pmd_callback_process: "
979 "events were not registered ");
982 * dev1: RTE_BBDEV_EVENT_ERROR - unregistered
983 * dev2: RTE_BBDEV_EVENT_ERROR - registered
985 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev2
->data
->dev_id
,
986 RTE_BBDEV_EVENT_ERROR
, event_callback
, &event_status
),
987 "Failed to callback rgstr for RTE_BBDEV_EVENT_ERROR");
989 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_ERROR
, NULL
);
990 TEST_ASSERT(event_status
== -1,
991 "Failed test for rte_bbdev_pmd_callback_process in dev1 "
992 "for RTE_BBDEV_EVENT_ERROR ");
994 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_ERROR
, NULL
);
995 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_ERROR
,
996 "Failed test for rte_bbdev_pmd_callback_process in dev2 "
997 "for RTE_BBDEV_EVENT_ERROR ");
1000 * dev1: RTE_BBDEV_EVENT_UNKNOWN - registered
1001 * dev2: RTE_BBDEV_EVENT_UNKNOWN - unregistered
1003 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev2
->data
->dev_id
,
1004 RTE_BBDEV_EVENT_UNKNOWN
, event_callback
, &event_status
),
1005 "Failed to callback register for RTE_BBDEV_EVENT_UNKNOWN "
1008 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
1009 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_UNKNOWN
,
1010 "Failed test for rte_bbdev_pmd_callback_process in dev2"
1011 " for RTE_BBDEV_EVENT_UNKNOWN ");
1013 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev2
->data
->dev_id
,
1014 RTE_BBDEV_EVENT_UNKNOWN
, event_callback
, &event_status
),
1015 "Failed to unregister RTE_BBDEV_EVENT_UNKNOWN ");
1017 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev2
->data
->dev_id
,
1018 RTE_BBDEV_EVENT_UNKNOWN
, event_callback
, &event_status
),
1019 "Failed to unregister RTE_BBDEV_EVENT_UNKNOWN : "
1020 "unregister function called once again ");
1023 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
1024 TEST_ASSERT(event_status
== -1,
1025 "Failed test for rte_bbdev_pmd_callback_process in dev2"
1026 " for RTE_BBDEV_EVENT_UNKNOWN ");
1028 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
1029 TEST_ASSERT(event_status
== (int) RTE_BBDEV_EVENT_UNKNOWN
,
1030 "Failed test for rte_bbdev_pmd_callback_process in dev2 "
1031 "for RTE_BBDEV_EVENT_UNKNOWN ");
1033 /* rte_bbdev_pmd_callback_process with invalid inputs */
1034 rte_bbdev_pmd_callback_process(NULL
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
1037 rte_bbdev_pmd_callback_process(dev1
, invalid_event_type
, NULL
);
1038 TEST_ASSERT(event_status
== -1,
1039 "Failed test for rte_bbdev_pmd_callback_process: "
1040 "for invalid event type ");
1042 /* rte_dev_callback_unregister with invalid inputs */
1043 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(invalid_dev_id
,
1044 RTE_BBDEV_EVENT_UNKNOWN
, event_callback
, &event_status
),
1045 "Failed test for rte_dev_callback_unregister "
1046 "for invalid_dev_id ");
1048 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1
->data
->dev_id
,
1049 invalid_event_type
, event_callback
, &event_status
),
1050 "Failed rte_dev_callback_unregister "
1051 "for invalid event type ");
1053 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1
->data
->dev_id
,
1054 invalid_event_type
, NULL
, &event_status
),
1055 "Failed rte_dev_callback_unregister "
1056 "when no callback function ");
1058 dev_id
= dev1
->data
->dev_id
;
1060 rte_bbdev_release(dev1
);
1061 rte_bbdev_release(dev2
);
1063 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev_id
,
1064 RTE_BBDEV_EVENT_ERROR
, event_callback
, &event_status
),
1065 "Failed test for rte_bbdev_callback_register: "
1066 "function called after rte_bbdev_driver_uninit .");
1068 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev_id
,
1069 RTE_BBDEV_EVENT_ERROR
, event_callback
, &event_status
),
1070 "Failed test for rte_dev_callback_unregister: "
1071 "function called after rte_bbdev_driver_uninit. ");
1074 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
1075 rte_bbdev_pmd_callback_process(dev1
, RTE_BBDEV_EVENT_ERROR
, NULL
);
1076 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
1077 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_ERROR
, NULL
);
1078 TEST_ASSERT(event_status
== -1,
1079 "Failed test for rte_bbdev_pmd_callback_process: "
1080 "callback function was called after rte_bbdev_driver_uninit");
1082 return TEST_SUCCESS
;
1086 test_bbdev_invalid_driver(void)
1088 struct rte_bbdev dev1
, *dev2
;
1089 uint8_t dev_id
= null_dev_id
;
1090 uint16_t queue_id
= 0;
1091 struct rte_bbdev_stats stats
;
1092 struct bbdev_testsuite_params
*ts_params
= &testsuite_params
;
1093 struct rte_bbdev_queue_info qinfo
;
1094 struct rte_bbdev_ops dev_ops_tmp
;
1096 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id
), "Failed to stop bbdev %u ",
1099 dev1
= rte_bbdev_devices
[dev_id
];
1100 dev2
= &rte_bbdev_devices
[dev_id
];
1102 /* Tests for rte_bbdev_setup_queues */
1103 dev2
->dev_ops
= NULL
;
1104 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id
, 1, SOCKET_ID_ANY
),
1105 "Failed test for rte_bbdev_setup_queues: "
1106 "NULL dev_ops structure ");
1107 dev2
->dev_ops
= dev1
.dev_ops
;
1109 dev_ops_tmp
= *dev2
->dev_ops
;
1110 dev_ops_tmp
.info_get
= NULL
;
1111 dev2
->dev_ops
= &dev_ops_tmp
;
1112 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id
, 1, SOCKET_ID_ANY
),
1113 "Failed test for rte_bbdev_setup_queues: "
1115 dev2
->dev_ops
= dev1
.dev_ops
;
1117 dev_ops_tmp
= *dev2
->dev_ops
;
1118 dev_ops_tmp
.queue_release
= NULL
;
1119 dev2
->dev_ops
= &dev_ops_tmp
;
1120 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id
, 1, SOCKET_ID_ANY
),
1121 "Failed test for rte_bbdev_setup_queues: "
1122 "NULL queue_release ");
1123 dev2
->dev_ops
= dev1
.dev_ops
;
1125 dev2
->data
->socket_id
= SOCKET_ID_ANY
;
1126 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id
, 1,
1127 SOCKET_ID_ANY
), "Failed to configure bbdev %u", dev_id
);
1129 /* Test for rte_bbdev_queue_configure */
1130 dev2
->dev_ops
= NULL
;
1131 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
1133 "Failed to configure queue %u on device %u "
1134 "with NULL dev_ops structure ", queue_id
, dev_id
);
1135 dev2
->dev_ops
= dev1
.dev_ops
;
1137 dev_ops_tmp
= *dev2
->dev_ops
;
1138 dev_ops_tmp
.queue_setup
= NULL
;
1139 dev2
->dev_ops
= &dev_ops_tmp
;
1140 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
1142 "Failed to configure queue %u on device %u "
1143 "with NULL queue_setup ", queue_id
, dev_id
);
1144 dev2
->dev_ops
= dev1
.dev_ops
;
1146 dev_ops_tmp
= *dev2
->dev_ops
;
1147 dev_ops_tmp
.info_get
= NULL
;
1148 dev2
->dev_ops
= &dev_ops_tmp
;
1149 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id
, queue_id
,
1151 "Failed to configure queue %u on device %u "
1152 "with NULL info_get ", queue_id
, dev_id
);
1153 dev2
->dev_ops
= dev1
.dev_ops
;
1155 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(RTE_BBDEV_MAX_DEVS
,
1156 queue_id
, &ts_params
->qconf
),
1157 "Failed to configure queue %u on device %u ",
1160 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id
, queue_id
,
1162 "Failed to configure queue %u on device %u ",
1165 /* Test for rte_bbdev_queue_info_get */
1166 dev2
->dev_ops
= NULL
;
1167 TEST_ASSERT_SUCCESS(rte_bbdev_queue_info_get(dev_id
, queue_id
, &qinfo
),
1168 "Failed test for rte_bbdev_info_get: "
1169 "NULL dev_ops structure ");
1170 dev2
->dev_ops
= dev1
.dev_ops
;
1172 TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(RTE_BBDEV_MAX_DEVS
,
1174 "Failed test for rte_bbdev_info_get: "
1177 TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(dev_id
,
1178 RTE_MAX_QUEUES_PER_PORT
, &qinfo
),
1179 "Failed test for rte_bbdev_info_get: "
1180 "invalid queue_id ");
1182 TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(dev_id
, queue_id
, NULL
),
1183 "Failed test for rte_bbdev_info_get: "
1184 "invalid dev_info ");
1186 /* Test for rte_bbdev_start */
1187 dev2
->dev_ops
= NULL
;
1188 TEST_ASSERT_FAIL(rte_bbdev_start(dev_id
),
1189 "Failed to start bbdev %u "
1190 "with NULL dev_ops structure ", dev_id
);
1191 dev2
->dev_ops
= dev1
.dev_ops
;
1193 TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id
),
1194 "Failed to start bbdev %u ", dev_id
);
1196 /* Test for rte_bbdev_queue_start */
1197 dev2
->dev_ops
= NULL
;
1198 TEST_ASSERT_FAIL(rte_bbdev_queue_start(dev_id
, queue_id
),
1199 "Failed to start queue %u on device %u: "
1200 "NULL dev_ops structure", queue_id
, dev_id
);
1201 dev2
->dev_ops
= dev1
.dev_ops
;
1203 TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id
, queue_id
),
1204 "Failed to start queue %u on device %u ", queue_id
,
1207 /* Tests for rte_bbdev_stats_get */
1208 dev2
->dev_ops
= NULL
;
1209 TEST_ASSERT_FAIL(rte_bbdev_stats_get(dev_id
, &stats
),
1210 "Failed test for rte_bbdev_stats_get on device %u ",
1212 dev2
->dev_ops
= dev1
.dev_ops
;
1214 dev_ops_tmp
= *dev2
->dev_ops
;
1215 dev_ops_tmp
.stats_reset
= NULL
;
1216 dev2
->dev_ops
= &dev_ops_tmp
;
1217 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id
, &stats
),
1218 "Failed test for rte_bbdev_stats_get: "
1220 dev2
->dev_ops
= dev1
.dev_ops
;
1222 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id
, &stats
),
1223 "Failed test for rte_bbdev_stats_get on device %u ",
1228 * rte_bbdev_callback_register,
1229 * rte_bbdev_pmd_callback_process,
1230 * rte_dev_callback_unregister
1232 dev2
->dev_ops
= NULL
;
1233 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev_id
,
1234 RTE_BBDEV_EVENT_UNKNOWN
, event_callback
, NULL
),
1235 "Failed to callback rgstr for RTE_BBDEV_EVENT_UNKNOWN");
1236 rte_bbdev_pmd_callback_process(dev2
, RTE_BBDEV_EVENT_UNKNOWN
, NULL
);
1238 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev_id
,
1239 RTE_BBDEV_EVENT_UNKNOWN
, event_callback
, NULL
),
1240 "Failed to unregister RTE_BBDEV_EVENT_ERROR ");
1241 dev2
->dev_ops
= dev1
.dev_ops
;
1243 /* Tests for rte_bbdev_stats_reset */
1244 dev2
->dev_ops
= NULL
;
1245 TEST_ASSERT_FAIL(rte_bbdev_stats_reset(dev_id
),
1246 "Failed to reset statistic for device %u ", dev_id
);
1247 dev2
->dev_ops
= dev1
.dev_ops
;
1249 dev_ops_tmp
= *dev2
->dev_ops
;
1250 dev_ops_tmp
.stats_reset
= NULL
;
1251 dev2
->dev_ops
= &dev_ops_tmp
;
1252 TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id
),
1253 "Failed test for rte_bbdev_stats_reset: "
1254 "NULL stats_reset ");
1255 dev2
->dev_ops
= dev1
.dev_ops
;
1257 TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id
),
1258 "Failed to reset statistic for device %u ", dev_id
);
1260 /* Tests for rte_bbdev_queue_stop */
1261 dev2
->dev_ops
= NULL
;
1262 TEST_ASSERT_FAIL(rte_bbdev_queue_stop(dev_id
, queue_id
),
1263 "Failed to stop queue %u on device %u: "
1264 "NULL dev_ops structure", queue_id
, dev_id
);
1265 dev2
->dev_ops
= dev1
.dev_ops
;
1267 TEST_ASSERT_SUCCESS(rte_bbdev_queue_stop(dev_id
, queue_id
),
1268 "Failed to stop queue %u on device %u ", queue_id
,
1271 /* Tests for rte_bbdev_stop */
1272 dev2
->dev_ops
= NULL
;
1273 TEST_ASSERT_FAIL(rte_bbdev_stop(dev_id
),
1274 "Failed to stop bbdev %u with NULL dev_ops structure ",
1276 dev2
->dev_ops
= dev1
.dev_ops
;
1278 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id
),
1279 "Failed to stop bbdev %u ", dev_id
);
1281 /* Tests for rte_bbdev_close */
1282 TEST_ASSERT_FAIL(rte_bbdev_close(RTE_BBDEV_MAX_DEVS
),
1283 "Failed to close bbdev with invalid dev_id");
1285 dev2
->dev_ops
= NULL
;
1286 TEST_ASSERT_FAIL(rte_bbdev_close(dev_id
),
1287 "Failed to close bbdev %u with NULL dev_ops structure ",
1289 dev2
->dev_ops
= dev1
.dev_ops
;
1291 TEST_ASSERT_SUCCESS(rte_bbdev_close(dev_id
),
1292 "Failed to close bbdev %u ", dev_id
);
1294 return TEST_SUCCESS
;
1298 test_bbdev_get_named_dev(void)
1300 struct rte_bbdev
*dev
, *dev_tmp
;
1301 const char *name
= "name";
1303 dev
= rte_bbdev_allocate(name
);
1304 TEST_ASSERT(dev
!= NULL
, "Failed to initialize bbdev driver");
1306 dev_tmp
= rte_bbdev_get_named_dev(NULL
);
1307 TEST_ASSERT(dev_tmp
== NULL
, "Failed test for rte_bbdev_get_named_dev: "
1308 "function called with NULL parameter");
1310 dev_tmp
= rte_bbdev_get_named_dev(name
);
1312 TEST_ASSERT(dev
== dev_tmp
, "Failed test for rte_bbdev_get_named_dev: "
1313 "wrong device was returned ");
1315 TEST_ASSERT_SUCCESS(rte_bbdev_release(dev
),
1316 "Failed to uninitialize bbdev driver %s ", name
);
1318 return TEST_SUCCESS
;
1321 static struct unit_test_suite bbdev_null_testsuite
= {
1322 .suite_name
= "BBDEV NULL Unit Test Suite",
1323 .setup
= testsuite_setup
,
1324 .teardown
= testsuite_teardown
,
1325 .unit_test_cases
= {
1327 TEST_CASE(test_bbdev_configure_invalid_dev_id
),
1329 TEST_CASE_ST(ut_setup
, ut_teardown
,
1330 test_bbdev_configure_invalid_num_queues
),
1332 TEST_CASE_ST(ut_setup
, ut_teardown
,
1333 test_bbdev_configure_stop_device
),
1335 TEST_CASE_ST(ut_setup
, ut_teardown
,
1336 test_bbdev_configure_stop_queue
),
1338 TEST_CASE_ST(ut_setup
, ut_teardown
,
1339 test_bbdev_configure_invalid_queue_configure
),
1341 TEST_CASE_ST(ut_setup
, ut_teardown
,
1342 test_bbdev_op_pool
),
1344 TEST_CASE_ST(ut_setup
, ut_teardown
,
1345 test_bbdev_op_type
),
1347 TEST_CASE_ST(ut_setup
, ut_teardown
,
1348 test_bbdev_op_pool_size
),
1350 TEST_CASE_ST(ut_setup
, ut_teardown
,
1353 TEST_CASE_ST(ut_setup
, ut_teardown
,
1354 test_bbdev_driver_init
),
1356 TEST_CASE_ST(ut_setup
, ut_teardown
,
1357 test_bbdev_callback
),
1359 TEST_CASE_ST(ut_setup
, ut_teardown
,
1360 test_bbdev_invalid_driver
),
1362 TEST_CASE_ST(ut_setup
, ut_teardown
,
1363 test_bbdev_get_named_dev
),
1365 TEST_CASE(test_bbdev_count
),
1367 TEST_CASES_END() /**< NULL terminate unit test array */
1371 REGISTER_TEST_COMMAND(unittest
, bbdev_null_testsuite
);