1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
5 #include <rte_common.h>
6 #include <rte_mempool.h>
8 #include <rte_ethdev.h>
9 #include <rte_eventdev.h>
10 #include <rte_bus_vdev.h>
12 #include <rte_event_eth_rx_adapter.h>
16 #define MAX_NUM_RX_QUEUE 64
17 #define NB_MBUFS (8192 * num_ports * MAX_NUM_RX_QUEUE)
18 #define MBUF_CACHE_SIZE 512
19 #define MBUF_PRIV_SIZE 0
20 #define TEST_INST_ID 0
22 #define TEST_ETHDEV_ID 0
24 struct event_eth_rx_adapter_test_params {
25 struct rte_mempool *mp;
26 uint16_t rx_rings, tx_rings;
28 int rx_intr_port_inited;
29 uint16_t rx_intr_port;
32 static struct event_eth_rx_adapter_test_params default_params;
33 static bool event_dev_created;
34 static bool eth_dev_created;
37 port_init_common(uint16_t port, const struct rte_eth_conf *port_conf,
38 struct rte_mempool *mp)
40 const uint16_t rx_ring_size = 512, tx_ring_size = 512;
43 struct rte_eth_dev_info dev_info;
45 if (!rte_eth_dev_is_valid_port(port))
48 retval = rte_eth_dev_configure(port, 0, 0, port_conf);
50 retval = rte_eth_dev_info_get(port, &dev_info);
54 default_params.rx_rings = RTE_MIN(dev_info.max_rx_queues,
56 default_params.tx_rings = 1;
58 /* Configure the Ethernet device. */
59 retval = rte_eth_dev_configure(port, default_params.rx_rings,
60 default_params.tx_rings, port_conf);
64 for (q = 0; q < default_params.rx_rings; q++) {
65 retval = rte_eth_rx_queue_setup(port, q, rx_ring_size,
66 rte_eth_dev_socket_id(port), NULL, mp);
71 /* Allocate and set up 1 TX queue per Ethernet port. */
72 for (q = 0; q < default_params.tx_rings; q++) {
73 retval = rte_eth_tx_queue_setup(port, q, tx_ring_size,
74 rte_eth_dev_socket_id(port), NULL);
79 /* Start the Ethernet port. */
80 retval = rte_eth_dev_start(port);
84 /* Display the port MAC address. */
85 struct rte_ether_addr addr;
86 retval = rte_eth_macaddr_get(port, &addr);
89 printf("Port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8
90 " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n",
91 (unsigned int)port, RTE_ETHER_ADDR_BYTES(&addr));
93 /* Enable RX in promiscuous mode for the Ethernet device. */
94 retval = rte_eth_promiscuous_enable(port);
102 port_init_rx_intr(uint16_t port, struct rte_mempool *mp)
104 static const struct rte_eth_conf port_conf_default = {
106 .mq_mode = ETH_MQ_RX_NONE,
113 return port_init_common(port, &port_conf_default, mp);
117 port_init(uint16_t port, struct rte_mempool *mp)
119 static const struct rte_eth_conf port_conf_default = {
121 .mq_mode = ETH_MQ_RX_NONE,
125 return port_init_common(port, &port_conf_default, mp);
129 init_port_rx_intr(int num_ports)
135 default_params.mp = rte_pktmbuf_pool_create("packet_pool",
139 RTE_MBUF_DEFAULT_BUF_SIZE,
141 if (!default_params.mp)
144 RTE_ETH_FOREACH_DEV(portid) {
145 retval = port_init_rx_intr(portid, default_params.mp);
148 err = rte_event_eth_rx_adapter_caps_get(TEST_DEV_ID, portid,
149 &default_params.caps);
152 if (!(default_params.caps &
153 RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) {
154 default_params.rx_intr_port_inited = 1;
155 default_params.rx_intr_port = portid;
158 retval = rte_eth_dev_stop(portid);
159 TEST_ASSERT(retval == 0, "Failed to stop port %u: %d\n",
166 init_ports(int num_ports)
171 struct rte_mempool *ptr = rte_mempool_lookup("packet_pool");
174 default_params.mp = rte_pktmbuf_pool_create("packet_pool",
178 RTE_MBUF_DEFAULT_BUF_SIZE,
181 default_params.mp = ptr;
183 if (!default_params.mp)
186 RTE_ETH_FOREACH_DEV(portid) {
187 retval = port_init(portid, default_params.mp);
196 testsuite_setup(void)
200 struct rte_event_dev_info dev_info;
202 count = rte_event_dev_count();
204 printf("Failed to find a valid event device,"
205 " testing with event_skeleton device\n");
206 err = rte_vdev_init("event_skeleton", NULL);
207 TEST_ASSERT(err == 0, "Failed to create event_skeleton. err=%d",
209 event_dev_created = true;
212 struct rte_event_dev_config config = {
213 .nb_event_queues = 1,
217 err = rte_event_dev_info_get(TEST_DEV_ID, &dev_info);
218 config.nb_event_queue_flows = dev_info.max_event_queue_flows;
219 config.nb_event_port_dequeue_depth =
220 dev_info.max_event_port_dequeue_depth;
221 config.nb_event_port_enqueue_depth =
222 dev_info.max_event_port_enqueue_depth;
223 config.nb_events_limit =
224 dev_info.max_num_events;
225 err = rte_event_dev_configure(TEST_DEV_ID, &config);
226 TEST_ASSERT(err == 0, "Event device initialization failed err %d\n",
229 count = rte_eth_dev_count_total();
231 printf("Testing with net_null device\n");
232 err = rte_vdev_init("net_null", NULL);
233 TEST_ASSERT(err == 0, "Failed to create net_null. err=%d",
235 eth_dev_created = true;
239 * eth devices like octeontx use event device to receive packets
240 * so rte_eth_dev_start invokes rte_event_dev_start internally, so
241 * call init_ports after rte_event_dev_configure
243 err = init_ports(rte_eth_dev_count_total());
244 TEST_ASSERT(err == 0, "Port initialization failed err %d\n", err);
246 err = rte_event_eth_rx_adapter_caps_get(TEST_DEV_ID, TEST_ETHDEV_ID,
247 &default_params.caps);
248 TEST_ASSERT(err == 0, "Failed to get adapter cap err %d\n",
255 testsuite_setup_rx_intr(void)
259 struct rte_event_dev_info dev_info;
261 count = rte_event_dev_count();
263 printf("Failed to find a valid event device,"
264 " testing with event_skeleton device\n");
265 err = rte_vdev_init("event_skeleton", NULL);
266 TEST_ASSERT(err == 0, "Failed to create event_skeleton. err=%d",
268 event_dev_created = true;
271 struct rte_event_dev_config config = {
272 .nb_event_queues = 1,
276 err = rte_event_dev_info_get(TEST_DEV_ID, &dev_info);
277 config.nb_event_queue_flows = dev_info.max_event_queue_flows;
278 config.nb_event_port_dequeue_depth =
279 dev_info.max_event_port_dequeue_depth;
280 config.nb_event_port_enqueue_depth =
281 dev_info.max_event_port_enqueue_depth;
282 config.nb_events_limit =
283 dev_info.max_num_events;
285 err = rte_event_dev_configure(TEST_DEV_ID, &config);
286 TEST_ASSERT(err == 0, "Event device initialization failed err %d\n",
289 count = rte_eth_dev_count_total();
291 printf("Testing with net_null device\n");
292 err = rte_vdev_init("net_null", NULL);
293 TEST_ASSERT(err == 0, "Failed to create net_null. err=%d",
295 eth_dev_created = true;
299 * eth devices like octeontx use event device to receive packets
300 * so rte_eth_dev_start invokes rte_event_dev_start internally, so
301 * call init_ports after rte_event_dev_configure
303 err = init_port_rx_intr(rte_eth_dev_count_total());
304 TEST_ASSERT(err == 0, "Port initialization failed err %d\n", err);
306 if (!default_params.rx_intr_port_inited)
309 err = rte_event_eth_rx_adapter_caps_get(TEST_DEV_ID,
310 default_params.rx_intr_port,
311 &default_params.caps);
312 TEST_ASSERT(err == 0, "Failed to get adapter cap err %d\n", err);
318 testsuite_teardown(void)
322 RTE_ETH_FOREACH_DEV(i)
325 if (eth_dev_created) {
326 err = rte_vdev_uninit("net_null");
328 printf("Failed to delete net_null. err=%d", err);
329 eth_dev_created = false;
332 rte_mempool_free(default_params.mp);
333 if (event_dev_created) {
334 err = rte_vdev_uninit("event_skeleton");
336 printf("Failed to delete event_skeleton. err=%d", err);
337 event_dev_created = false;
340 memset(&default_params, 0, sizeof(default_params));
344 testsuite_teardown_rx_intr(void)
347 if (!default_params.rx_intr_port_inited)
350 rte_eth_dev_stop(default_params.rx_intr_port);
351 if (eth_dev_created) {
352 err = rte_vdev_uninit("net_null");
354 printf("Failed to delete net_null. err=%d", err);
355 eth_dev_created = false;
357 rte_mempool_free(default_params.mp);
358 if (event_dev_created) {
359 err = rte_vdev_uninit("event_skeleton");
361 printf("Failed to delete event_skeleton. err=%d", err);
362 event_dev_created = false;
365 memset(&default_params, 0, sizeof(default_params));
372 struct rte_event_dev_info dev_info;
373 struct rte_event_port_conf rx_p_conf;
375 memset(&rx_p_conf, 0, sizeof(rx_p_conf));
377 err = rte_event_dev_info_get(TEST_DEV_ID, &dev_info);
378 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
380 rx_p_conf.new_event_threshold = dev_info.max_num_events;
381 rx_p_conf.dequeue_depth = dev_info.max_event_port_dequeue_depth;
382 rx_p_conf.enqueue_depth = dev_info.max_event_port_enqueue_depth;
383 err = rte_event_eth_rx_adapter_create(TEST_INST_ID, TEST_DEV_ID,
385 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
391 adapter_create_with_params(void)
394 struct rte_event_dev_info dev_info;
395 struct rte_event_port_conf rx_p_conf;
396 struct rte_event_eth_rx_adapter_params rxa_params;
398 memset(&rx_p_conf, 0, sizeof(rx_p_conf));
400 err = rte_event_dev_info_get(TEST_DEV_ID, &dev_info);
401 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
403 rx_p_conf.new_event_threshold = dev_info.max_num_events;
404 rx_p_conf.dequeue_depth = dev_info.max_event_port_dequeue_depth;
405 rx_p_conf.enqueue_depth = dev_info.max_event_port_enqueue_depth;
407 rxa_params.use_queue_event_buf = false;
408 rxa_params.event_buf_size = 0;
410 err = rte_event_eth_rx_adapter_create_with_params(TEST_INST_ID,
411 TEST_DEV_ID, &rx_p_conf, &rxa_params);
412 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
414 rxa_params.use_queue_event_buf = true;
416 err = rte_event_eth_rx_adapter_create_with_params(TEST_INST_ID,
417 TEST_DEV_ID, &rx_p_conf, &rxa_params);
418 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
420 err = rte_event_eth_rx_adapter_create_with_params(TEST_INST_ID,
421 TEST_DEV_ID, &rx_p_conf, &rxa_params);
422 TEST_ASSERT(err == -EEXIST, "Expected -EEXIST got %d", err);
428 adapter_queue_event_buf_test(void)
434 struct rte_event_eth_rx_adapter_queue_conf queue_config = {0};
436 err = rte_event_eth_rx_adapter_caps_get(TEST_DEV_ID, TEST_ETHDEV_ID,
438 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
441 ev.sched_type = RTE_SCHED_TYPE_ATOMIC;
444 queue_config.rx_queue_flags = 0;
445 if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) {
447 queue_config.rx_queue_flags =
448 RTE_EVENT_ETH_RX_ADAPTER_QUEUE_FLOW_ID_VALID;
450 queue_config.ev = ev;
451 queue_config.servicing_weight = 1;
452 queue_config.event_buf_size = 0;
454 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
457 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
459 queue_config.event_buf_size = 1024;
461 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
464 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
466 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
469 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
477 rte_event_eth_rx_adapter_free(TEST_INST_ID);
481 adapter_create_free(void)
485 struct rte_event_port_conf rx_p_conf = {
488 .new_event_threshold = 1200,
491 err = rte_event_eth_rx_adapter_create(TEST_INST_ID, TEST_DEV_ID,
493 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
495 err = rte_event_eth_rx_adapter_create(TEST_INST_ID, TEST_DEV_ID,
497 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
499 err = rte_event_eth_rx_adapter_create(TEST_INST_ID,
500 TEST_DEV_ID, &rx_p_conf);
501 TEST_ASSERT(err == -EEXIST, "Expected -EEXIST %d got %d", -EEXIST, err);
503 err = rte_event_eth_rx_adapter_free(TEST_INST_ID);
504 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
506 err = rte_event_eth_rx_adapter_free(TEST_INST_ID);
507 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL %d got %d", -EINVAL, err);
509 err = rte_event_eth_rx_adapter_free(1);
510 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL %d got %d", -EINVAL, err);
516 adapter_create_free_with_params(void)
520 struct rte_event_port_conf rx_p_conf = {
523 .new_event_threshold = 1200,
526 struct rte_event_eth_rx_adapter_params rxa_params = {
527 .event_buf_size = 1024
530 err = rte_event_eth_rx_adapter_create_with_params(TEST_INST_ID,
531 TEST_DEV_ID, NULL, NULL);
532 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
534 err = rte_event_eth_rx_adapter_create_with_params(TEST_INST_ID,
535 TEST_DEV_ID, &rx_p_conf, &rxa_params);
536 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
538 err = rte_event_eth_rx_adapter_create_with_params(TEST_INST_ID,
539 TEST_DEV_ID, &rx_p_conf, &rxa_params);
540 TEST_ASSERT(err == -EEXIST, "Expected -EEXIST %d got %d", -EEXIST, err);
542 rxa_params.event_buf_size = 0;
543 err = rte_event_eth_rx_adapter_create_with_params(TEST_INST_ID,
544 TEST_DEV_ID, &rx_p_conf, &rxa_params);
545 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
547 err = rte_event_eth_rx_adapter_free(TEST_INST_ID);
548 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
550 err = rte_event_eth_rx_adapter_free(TEST_INST_ID);
551 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL %d got %d", -EINVAL, err);
553 err = rte_event_eth_rx_adapter_free(1);
554 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL %d got %d", -EINVAL, err);
560 adapter_queue_add_del(void)
566 struct rte_event_eth_rx_adapter_queue_conf queue_config = {0};
568 err = rte_event_eth_rx_adapter_caps_get(TEST_DEV_ID, TEST_ETHDEV_ID,
570 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
573 ev.sched_type = RTE_SCHED_TYPE_ATOMIC;
576 queue_config.rx_queue_flags = 0;
577 if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) {
579 queue_config.rx_queue_flags =
580 RTE_EVENT_ETH_RX_ADAPTER_QUEUE_FLOW_ID_VALID;
582 queue_config.ev = ev;
583 queue_config.servicing_weight = 1;
585 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
586 rte_eth_dev_count_total(),
588 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
590 if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ) {
591 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
594 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
596 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
598 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
600 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
604 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
606 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
609 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
611 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
615 TEST_ASSERT(err == -EINVAL, "Expected EINVAL got %d", err);
617 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
620 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
622 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
624 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
626 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
628 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
630 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
632 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
635 err = rte_event_eth_rx_adapter_queue_add(1, TEST_ETHDEV_ID, -1,
637 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
639 err = rte_event_eth_rx_adapter_queue_del(1, TEST_ETHDEV_ID, -1);
640 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
646 adapter_multi_eth_add_del(void)
651 uint16_t port_index, port_index_base, drv_id = 0;
652 char driver_name[50];
654 struct rte_event_eth_rx_adapter_queue_conf queue_config = {0};
657 ev.sched_type = RTE_SCHED_TYPE_ATOMIC;
660 queue_config.rx_queue_flags = 0;
661 queue_config.ev = ev;
662 queue_config.servicing_weight = 1;
664 /* stop eth devices for existing */
666 for (; port_index < rte_eth_dev_count_total(); port_index += 1) {
667 err = rte_eth_dev_stop(port_index);
668 TEST_ASSERT(err == 0, "Failed to stop port %u: %d\n",
672 /* add the max port for rx_adapter */
673 port_index = rte_eth_dev_count_total();
674 port_index_base = port_index;
675 for (; port_index < RTE_MAX_ETHPORTS; port_index += 1) {
676 snprintf(driver_name, sizeof(driver_name), "%s%u", "net_null",
678 err = rte_vdev_init(driver_name, NULL);
679 TEST_ASSERT(err == 0, "Failed driver %s got %d",
684 err = init_ports(rte_eth_dev_count_total());
685 TEST_ASSERT(err == 0, "Port initialization failed err %d\n", err);
687 /* eth_rx_adapter_queue_add for n ports */
689 for (; port_index < rte_eth_dev_count_total(); port_index += 1) {
690 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
693 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
696 /* eth_rx_adapter_queue_del n ports */
698 for (; port_index < rte_eth_dev_count_total(); port_index += 1) {
699 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
701 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
704 /* delete vdev ports */
705 for (drv_id = 0, port_index = port_index_base;
706 port_index < RTE_MAX_ETHPORTS;
707 drv_id += 1, port_index += 1) {
708 snprintf(driver_name, sizeof(driver_name), "%s%u", "net_null",
710 err = rte_vdev_uninit(driver_name);
711 TEST_ASSERT(err == 0, "Failed driver %s got %d",
719 adapter_intr_queue_add_del(void)
725 struct rte_event_eth_rx_adapter_queue_conf queue_config = {0};
727 if (!default_params.rx_intr_port_inited)
730 eth_port = default_params.rx_intr_port;
731 err = rte_event_eth_rx_adapter_caps_get(TEST_DEV_ID, eth_port, &cap);
732 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
735 ev.sched_type = RTE_SCHED_TYPE_ATOMIC;
738 queue_config.rx_queue_flags = 0;
739 queue_config.ev = ev;
741 /* weight = 0 => interrupt mode */
742 queue_config.servicing_weight = 0;
744 if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ) {
746 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
749 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
753 queue_config.servicing_weight = 0;
754 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
758 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
760 if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ) {
762 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
765 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
768 /* del remaining queues */
769 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
772 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
775 queue_config.servicing_weight = 0;
776 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
780 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
782 /* intr -> poll mode queue */
783 queue_config.servicing_weight = 1;
785 if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ) {
786 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
790 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
793 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
797 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
800 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
803 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
809 adapter_start_stop(void)
815 ev.sched_type = RTE_SCHED_TYPE_ATOMIC;
818 struct rte_event_eth_rx_adapter_queue_conf queue_config = {0};
820 queue_config.rx_queue_flags = 0;
821 if (default_params.caps &
822 RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) {
824 queue_config.rx_queue_flags =
825 RTE_EVENT_ETH_RX_ADAPTER_QUEUE_FLOW_ID_VALID;
828 queue_config.ev = ev;
829 queue_config.servicing_weight = 1;
831 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, TEST_ETHDEV_ID,
833 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
835 err = rte_event_eth_rx_adapter_start(TEST_INST_ID);
836 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
838 err = rte_event_eth_rx_adapter_stop(TEST_INST_ID);
839 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
841 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID, TEST_ETHDEV_ID,
843 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
845 err = rte_event_eth_rx_adapter_start(TEST_INST_ID);
846 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
848 err = rte_event_eth_rx_adapter_stop(TEST_INST_ID);
849 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
851 err = rte_event_eth_rx_adapter_start(1);
852 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
854 err = rte_event_eth_rx_adapter_stop(1);
855 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
864 struct rte_event_eth_rx_adapter_stats stats;
866 err = rte_event_eth_rx_adapter_stats_get(TEST_INST_ID, NULL);
867 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
869 err = rte_event_eth_rx_adapter_stats_get(TEST_INST_ID, &stats);
870 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
872 err = rte_event_eth_rx_adapter_stats_get(1, &stats);
873 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
879 adapter_queue_conf(void)
882 struct rte_event_eth_rx_adapter_queue_conf queue_conf = {0};
884 /* Case 1: queue conf get without any queues in Rx adapter */
885 err = rte_event_eth_rx_adapter_queue_conf_get(TEST_INST_ID,
888 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
890 /* Add queue to Rx adapter */
891 queue_conf.ev.queue_id = 0;
892 queue_conf.ev.sched_type = RTE_SCHED_TYPE_ATOMIC;
893 queue_conf.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL;
895 err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID,
898 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
900 /* Case 2: queue conf get with queue added to Rx adapter */
901 err = rte_event_eth_rx_adapter_queue_conf_get(TEST_INST_ID,
904 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
906 /* Case 3: queue conf get with invalid rx queue id */
907 err = rte_event_eth_rx_adapter_queue_conf_get(TEST_INST_ID,
910 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
912 /* Case 4: queue conf get with NULL queue conf struct */
913 err = rte_event_eth_rx_adapter_queue_conf_get(TEST_INST_ID,
916 TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err);
918 /* Delete queue from the Rx adapter */
919 err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID,
922 TEST_ASSERT(err == 0, "Expected 0 got %d", err);
927 static struct unit_test_suite event_eth_rx_tests = {
928 .suite_name = "rx event eth adapter test suite",
929 .setup = testsuite_setup,
930 .teardown = testsuite_teardown,
932 TEST_CASE_ST(NULL, NULL, adapter_create_free),
933 TEST_CASE_ST(NULL, NULL, adapter_create_free_with_params),
934 TEST_CASE_ST(adapter_create, adapter_free,
935 adapter_queue_add_del),
936 TEST_CASE_ST(adapter_create, adapter_free,
937 adapter_multi_eth_add_del),
938 TEST_CASE_ST(adapter_create, adapter_free, adapter_start_stop),
939 TEST_CASE_ST(adapter_create, adapter_free, adapter_stats),
940 TEST_CASE_ST(adapter_create, adapter_free, adapter_queue_conf),
941 TEST_CASE_ST(adapter_create_with_params, adapter_free,
942 adapter_queue_event_buf_test),
943 TEST_CASES_END() /**< NULL terminate unit test array */
947 static struct unit_test_suite event_eth_rx_intr_tests = {
948 .suite_name = "rx event eth adapter test suite",
949 .setup = testsuite_setup_rx_intr,
950 .teardown = testsuite_teardown_rx_intr,
952 TEST_CASE_ST(adapter_create, adapter_free,
953 adapter_intr_queue_add_del),
954 TEST_CASES_END() /**< NULL terminate unit test array */
959 test_event_eth_rx_adapter_common(void)
961 return unit_test_suite_runner(&event_eth_rx_tests);
965 test_event_eth_rx_intr_adapter_common(void)
967 return unit_test_suite_runner(&event_eth_rx_intr_tests);
970 REGISTER_TEST_COMMAND(event_eth_rx_adapter_autotest,
971 test_event_eth_rx_adapter_common);
972 REGISTER_TEST_COMMAND(event_eth_rx_intr_adapter_autotest,
973 test_event_eth_rx_intr_adapter_common);