xref: /f-stack/dpdk/app/test/test_eventdev.c (revision 2d9fd380)
14418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
24418919fSjohnjiang  * Copyright(c) 2016 Cavium, Inc
34418919fSjohnjiang  */
44418919fSjohnjiang 
54418919fSjohnjiang #include <rte_common.h>
64418919fSjohnjiang #include <rte_hexdump.h>
74418919fSjohnjiang #include <rte_mbuf.h>
84418919fSjohnjiang #include <rte_malloc.h>
94418919fSjohnjiang #include <rte_memcpy.h>
104418919fSjohnjiang #include <rte_eventdev.h>
114418919fSjohnjiang #include <rte_dev.h>
124418919fSjohnjiang #include <rte_bus_vdev.h>
134418919fSjohnjiang 
144418919fSjohnjiang #include "test.h"
154418919fSjohnjiang 
164418919fSjohnjiang #define TEST_DEV_ID   0
174418919fSjohnjiang 
184418919fSjohnjiang static int
testsuite_setup(void)194418919fSjohnjiang testsuite_setup(void)
204418919fSjohnjiang {
214418919fSjohnjiang 	RTE_BUILD_BUG_ON(sizeof(struct rte_event) != 16);
224418919fSjohnjiang 	uint8_t count;
234418919fSjohnjiang 	count = rte_event_dev_count();
244418919fSjohnjiang 	if (!count) {
254418919fSjohnjiang 		printf("Failed to find a valid event device,"
264418919fSjohnjiang 			" testing with event_skeleton device\n");
274418919fSjohnjiang 		return rte_vdev_init("event_skeleton", NULL);
284418919fSjohnjiang 	}
294418919fSjohnjiang 	return TEST_SUCCESS;
304418919fSjohnjiang }
314418919fSjohnjiang 
324418919fSjohnjiang static void
testsuite_teardown(void)334418919fSjohnjiang testsuite_teardown(void)
344418919fSjohnjiang {
354418919fSjohnjiang }
364418919fSjohnjiang 
374418919fSjohnjiang static int
test_eventdev_count(void)384418919fSjohnjiang test_eventdev_count(void)
394418919fSjohnjiang {
404418919fSjohnjiang 	uint8_t count;
414418919fSjohnjiang 	count = rte_event_dev_count();
424418919fSjohnjiang 	TEST_ASSERT(count > 0, "Invalid eventdev count %" PRIu8, count);
434418919fSjohnjiang 	return TEST_SUCCESS;
444418919fSjohnjiang }
454418919fSjohnjiang 
464418919fSjohnjiang static int
test_eventdev_get_dev_id(void)474418919fSjohnjiang test_eventdev_get_dev_id(void)
484418919fSjohnjiang {
494418919fSjohnjiang 	int ret;
504418919fSjohnjiang 	ret = rte_event_dev_get_dev_id("not_a_valid_eventdev_driver");
514418919fSjohnjiang 	TEST_ASSERT_FAIL(ret, "Expected <0 for invalid dev name ret=%d", ret);
524418919fSjohnjiang 	return TEST_SUCCESS;
534418919fSjohnjiang }
544418919fSjohnjiang 
554418919fSjohnjiang static int
test_eventdev_socket_id(void)564418919fSjohnjiang test_eventdev_socket_id(void)
574418919fSjohnjiang {
584418919fSjohnjiang 	int socket_id;
594418919fSjohnjiang 	socket_id = rte_event_dev_socket_id(TEST_DEV_ID);
604418919fSjohnjiang 	TEST_ASSERT(socket_id != -EINVAL, "Failed to get socket_id %d",
614418919fSjohnjiang 				socket_id);
624418919fSjohnjiang 	socket_id = rte_event_dev_socket_id(RTE_EVENT_MAX_DEVS);
634418919fSjohnjiang 	TEST_ASSERT(socket_id == -EINVAL, "Expected -EINVAL %d", socket_id);
644418919fSjohnjiang 
654418919fSjohnjiang 	return TEST_SUCCESS;
664418919fSjohnjiang }
674418919fSjohnjiang 
684418919fSjohnjiang static int
test_eventdev_info_get(void)694418919fSjohnjiang test_eventdev_info_get(void)
704418919fSjohnjiang {
714418919fSjohnjiang 	int ret;
724418919fSjohnjiang 	struct rte_event_dev_info info;
734418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, NULL);
744418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
754418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
764418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
774418919fSjohnjiang 	TEST_ASSERT(info.max_event_ports > 0,
784418919fSjohnjiang 			"Not enough event ports %d", info.max_event_ports);
794418919fSjohnjiang 	TEST_ASSERT(info.max_event_queues > 0,
804418919fSjohnjiang 			"Not enough event queues %d", info.max_event_queues);
814418919fSjohnjiang 	return TEST_SUCCESS;
824418919fSjohnjiang }
834418919fSjohnjiang 
844418919fSjohnjiang static inline void
devconf_set_default_sane_values(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)854418919fSjohnjiang devconf_set_default_sane_values(struct rte_event_dev_config *dev_conf,
864418919fSjohnjiang 			struct rte_event_dev_info *info)
874418919fSjohnjiang {
884418919fSjohnjiang 	memset(dev_conf, 0, sizeof(struct rte_event_dev_config));
894418919fSjohnjiang 	dev_conf->dequeue_timeout_ns = info->min_dequeue_timeout_ns;
904418919fSjohnjiang 	dev_conf->nb_event_ports = info->max_event_ports;
914418919fSjohnjiang 	dev_conf->nb_event_queues = info->max_event_queues;
924418919fSjohnjiang 	dev_conf->nb_event_queue_flows = info->max_event_queue_flows;
934418919fSjohnjiang 	dev_conf->nb_event_port_dequeue_depth =
944418919fSjohnjiang 			info->max_event_port_dequeue_depth;
954418919fSjohnjiang 	dev_conf->nb_event_port_enqueue_depth =
964418919fSjohnjiang 			info->max_event_port_enqueue_depth;
974418919fSjohnjiang 	dev_conf->nb_event_port_enqueue_depth =
984418919fSjohnjiang 			info->max_event_port_enqueue_depth;
994418919fSjohnjiang 	dev_conf->nb_events_limit =
1004418919fSjohnjiang 			info->max_num_events;
1014418919fSjohnjiang }
1024418919fSjohnjiang 
1034418919fSjohnjiang static int
test_ethdev_config_run(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info,void (* fn)(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info))1044418919fSjohnjiang test_ethdev_config_run(struct rte_event_dev_config *dev_conf,
1054418919fSjohnjiang 		struct rte_event_dev_info *info,
1064418919fSjohnjiang 		void (*fn)(struct rte_event_dev_config *dev_conf,
1074418919fSjohnjiang 			struct rte_event_dev_info *info))
1084418919fSjohnjiang {
1094418919fSjohnjiang 	devconf_set_default_sane_values(dev_conf, info);
1104418919fSjohnjiang 	fn(dev_conf, info);
1114418919fSjohnjiang 	return rte_event_dev_configure(TEST_DEV_ID, dev_conf);
1124418919fSjohnjiang }
1134418919fSjohnjiang 
1144418919fSjohnjiang static void
max_dequeue_limit(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)1154418919fSjohnjiang max_dequeue_limit(struct rte_event_dev_config *dev_conf,
1164418919fSjohnjiang 		  struct rte_event_dev_info *info)
1174418919fSjohnjiang {
1184418919fSjohnjiang 	dev_conf->dequeue_timeout_ns = info->max_dequeue_timeout_ns + 1;
1194418919fSjohnjiang }
1204418919fSjohnjiang 
1214418919fSjohnjiang static void
max_events_limit(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)1224418919fSjohnjiang max_events_limit(struct rte_event_dev_config *dev_conf,
1234418919fSjohnjiang 		  struct rte_event_dev_info *info)
1244418919fSjohnjiang {
1254418919fSjohnjiang 	dev_conf->nb_events_limit  = info->max_num_events + 1;
1264418919fSjohnjiang }
1274418919fSjohnjiang 
1284418919fSjohnjiang static void
max_event_ports(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)1294418919fSjohnjiang max_event_ports(struct rte_event_dev_config *dev_conf,
1304418919fSjohnjiang 		  struct rte_event_dev_info *info)
1314418919fSjohnjiang {
1324418919fSjohnjiang 	dev_conf->nb_event_ports = info->max_event_ports + 1;
1334418919fSjohnjiang }
1344418919fSjohnjiang 
1354418919fSjohnjiang static void
max_event_queues(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)1364418919fSjohnjiang max_event_queues(struct rte_event_dev_config *dev_conf,
1374418919fSjohnjiang 		  struct rte_event_dev_info *info)
1384418919fSjohnjiang {
1394418919fSjohnjiang 	dev_conf->nb_event_queues = info->max_event_queues + 1;
1404418919fSjohnjiang }
1414418919fSjohnjiang 
1424418919fSjohnjiang static void
max_event_queue_flows(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)1434418919fSjohnjiang max_event_queue_flows(struct rte_event_dev_config *dev_conf,
1444418919fSjohnjiang 		  struct rte_event_dev_info *info)
1454418919fSjohnjiang {
1464418919fSjohnjiang 	dev_conf->nb_event_queue_flows = info->max_event_queue_flows + 1;
1474418919fSjohnjiang }
1484418919fSjohnjiang 
1494418919fSjohnjiang static void
max_event_port_dequeue_depth(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)1504418919fSjohnjiang max_event_port_dequeue_depth(struct rte_event_dev_config *dev_conf,
1514418919fSjohnjiang 		  struct rte_event_dev_info *info)
1524418919fSjohnjiang {
1534418919fSjohnjiang 	dev_conf->nb_event_port_dequeue_depth =
1544418919fSjohnjiang 		info->max_event_port_dequeue_depth + 1;
1554418919fSjohnjiang }
1564418919fSjohnjiang 
1574418919fSjohnjiang static void
max_event_port_enqueue_depth(struct rte_event_dev_config * dev_conf,struct rte_event_dev_info * info)1584418919fSjohnjiang max_event_port_enqueue_depth(struct rte_event_dev_config *dev_conf,
1594418919fSjohnjiang 		  struct rte_event_dev_info *info)
1604418919fSjohnjiang {
1614418919fSjohnjiang 	dev_conf->nb_event_port_enqueue_depth =
1624418919fSjohnjiang 		info->max_event_port_enqueue_depth + 1;
1634418919fSjohnjiang }
1644418919fSjohnjiang 
1654418919fSjohnjiang 
1664418919fSjohnjiang static int
test_eventdev_configure(void)1674418919fSjohnjiang test_eventdev_configure(void)
1684418919fSjohnjiang {
1694418919fSjohnjiang 	int ret;
1704418919fSjohnjiang 	struct rte_event_dev_config dev_conf;
1714418919fSjohnjiang 	struct rte_event_dev_info info;
1724418919fSjohnjiang 	ret = rte_event_dev_configure(TEST_DEV_ID, NULL);
1734418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
1744418919fSjohnjiang 
1754418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
1764418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
1774418919fSjohnjiang 
1784418919fSjohnjiang 	/* Check limits */
1794418919fSjohnjiang 	TEST_ASSERT_EQUAL(-EINVAL,
1804418919fSjohnjiang 		test_ethdev_config_run(&dev_conf, &info, max_dequeue_limit),
1814418919fSjohnjiang 		 "Config negative test failed");
1824418919fSjohnjiang 	TEST_ASSERT_EQUAL(-EINVAL,
1834418919fSjohnjiang 		test_ethdev_config_run(&dev_conf, &info, max_events_limit),
1844418919fSjohnjiang 		 "Config negative test failed");
1854418919fSjohnjiang 	TEST_ASSERT_EQUAL(-EINVAL,
1864418919fSjohnjiang 		test_ethdev_config_run(&dev_conf, &info, max_event_ports),
1874418919fSjohnjiang 		 "Config negative test failed");
1884418919fSjohnjiang 	TEST_ASSERT_EQUAL(-EINVAL,
1894418919fSjohnjiang 		test_ethdev_config_run(&dev_conf, &info, max_event_queues),
1904418919fSjohnjiang 		 "Config negative test failed");
1914418919fSjohnjiang 	TEST_ASSERT_EQUAL(-EINVAL,
1924418919fSjohnjiang 		test_ethdev_config_run(&dev_conf, &info, max_event_queue_flows),
1934418919fSjohnjiang 		"Config negative test failed");
1944418919fSjohnjiang 
1954418919fSjohnjiang 	if (info.event_dev_cap & RTE_EVENT_DEV_CAP_BURST_MODE) {
1964418919fSjohnjiang 		TEST_ASSERT_EQUAL(-EINVAL,
1974418919fSjohnjiang 				test_ethdev_config_run(&dev_conf, &info,
1984418919fSjohnjiang 					max_event_port_dequeue_depth),
1994418919fSjohnjiang 				"Config negative test failed");
2004418919fSjohnjiang 		TEST_ASSERT_EQUAL(-EINVAL,
2014418919fSjohnjiang 				test_ethdev_config_run(&dev_conf, &info,
2024418919fSjohnjiang 					max_event_port_enqueue_depth),
2034418919fSjohnjiang 				"Config negative test failed");
2044418919fSjohnjiang 	}
2054418919fSjohnjiang 
2064418919fSjohnjiang 	/* Positive case */
2074418919fSjohnjiang 	devconf_set_default_sane_values(&dev_conf, &info);
2084418919fSjohnjiang 	ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf);
2094418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev");
2104418919fSjohnjiang 
2114418919fSjohnjiang 	/* re-configure */
2124418919fSjohnjiang 	devconf_set_default_sane_values(&dev_conf, &info);
2134418919fSjohnjiang 	dev_conf.nb_event_ports = RTE_MAX(info.max_event_ports/2, 1);
2144418919fSjohnjiang 	dev_conf.nb_event_queues = RTE_MAX(info.max_event_queues/2, 1);
2154418919fSjohnjiang 	ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf);
2164418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to re configure eventdev");
2174418919fSjohnjiang 
2184418919fSjohnjiang 	/* re-configure back to max_event_queues and max_event_ports */
2194418919fSjohnjiang 	devconf_set_default_sane_values(&dev_conf, &info);
2204418919fSjohnjiang 	ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf);
2214418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to re-configure eventdev");
2224418919fSjohnjiang 
2234418919fSjohnjiang 	return TEST_SUCCESS;
2244418919fSjohnjiang 
2254418919fSjohnjiang }
2264418919fSjohnjiang 
2274418919fSjohnjiang static int
eventdev_configure_setup(void)2284418919fSjohnjiang eventdev_configure_setup(void)
2294418919fSjohnjiang {
2304418919fSjohnjiang 	int ret;
2314418919fSjohnjiang 	struct rte_event_dev_config dev_conf;
2324418919fSjohnjiang 	struct rte_event_dev_info info;
2334418919fSjohnjiang 
2344418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
2354418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
2364418919fSjohnjiang 	devconf_set_default_sane_values(&dev_conf, &info);
2374418919fSjohnjiang 	ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf);
2384418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev");
2394418919fSjohnjiang 
2404418919fSjohnjiang 	return TEST_SUCCESS;
2414418919fSjohnjiang }
2424418919fSjohnjiang 
2434418919fSjohnjiang static int
test_eventdev_queue_default_conf_get(void)2444418919fSjohnjiang test_eventdev_queue_default_conf_get(void)
2454418919fSjohnjiang {
2464418919fSjohnjiang 	int i, ret;
2474418919fSjohnjiang 	struct rte_event_queue_conf qconf;
2484418919fSjohnjiang 
2494418919fSjohnjiang 	ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, NULL);
2504418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
2514418919fSjohnjiang 
2524418919fSjohnjiang 	uint32_t queue_count;
2534418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
2544418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
2554418919fSjohnjiang 			    "Queue count get failed");
2564418919fSjohnjiang 
2574418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
2584418919fSjohnjiang 		ret = rte_event_queue_default_conf_get(TEST_DEV_ID, i,
2594418919fSjohnjiang 						 &qconf);
2604418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to get queue%d info", i);
2614418919fSjohnjiang 	}
2624418919fSjohnjiang 
2634418919fSjohnjiang 	return TEST_SUCCESS;
2644418919fSjohnjiang }
2654418919fSjohnjiang 
2664418919fSjohnjiang static int
test_eventdev_queue_setup(void)2674418919fSjohnjiang test_eventdev_queue_setup(void)
2684418919fSjohnjiang {
2694418919fSjohnjiang 	int i, ret;
2704418919fSjohnjiang 	struct rte_event_dev_info info;
2714418919fSjohnjiang 	struct rte_event_queue_conf qconf;
2724418919fSjohnjiang 
2734418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
2744418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
2754418919fSjohnjiang 
2764418919fSjohnjiang 	/* Negative cases */
2774418919fSjohnjiang 	ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf);
2784418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get queue0 info");
2794418919fSjohnjiang 	qconf.event_queue_cfg =	RTE_EVENT_QUEUE_CFG_ALL_TYPES;
2804418919fSjohnjiang 	qconf.nb_atomic_flows = info.max_event_queue_flows + 1;
2814418919fSjohnjiang 	ret = rte_event_queue_setup(TEST_DEV_ID, 0, &qconf);
2824418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
2834418919fSjohnjiang 
2844418919fSjohnjiang 	qconf.nb_atomic_flows = info.max_event_queue_flows;
2854418919fSjohnjiang 	qconf.schedule_type = RTE_SCHED_TYPE_ORDERED;
2864418919fSjohnjiang 	qconf.nb_atomic_order_sequences = info.max_event_queue_flows + 1;
2874418919fSjohnjiang 	ret = rte_event_queue_setup(TEST_DEV_ID, 0, &qconf);
2884418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
2894418919fSjohnjiang 
2904418919fSjohnjiang 	ret = rte_event_queue_setup(TEST_DEV_ID, info.max_event_queues,
2914418919fSjohnjiang 					&qconf);
2924418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
2934418919fSjohnjiang 
2944418919fSjohnjiang 	/* Positive case */
2954418919fSjohnjiang 	ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf);
2964418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get queue0 info");
2974418919fSjohnjiang 	ret = rte_event_queue_setup(TEST_DEV_ID, 0, &qconf);
2984418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to setup queue0");
2994418919fSjohnjiang 
3004418919fSjohnjiang 	uint32_t queue_count;
3014418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
3024418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
3034418919fSjohnjiang 			    "Queue count get failed");
3044418919fSjohnjiang 
3054418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
3064418919fSjohnjiang 		ret = rte_event_queue_setup(TEST_DEV_ID, i, NULL);
3074418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i);
3084418919fSjohnjiang 	}
3094418919fSjohnjiang 
3104418919fSjohnjiang 	return TEST_SUCCESS;
3114418919fSjohnjiang }
3124418919fSjohnjiang 
3134418919fSjohnjiang static int
test_eventdev_queue_count(void)3144418919fSjohnjiang test_eventdev_queue_count(void)
3154418919fSjohnjiang {
3164418919fSjohnjiang 	int ret;
3174418919fSjohnjiang 	struct rte_event_dev_info info;
3184418919fSjohnjiang 
3194418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
3204418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
3214418919fSjohnjiang 
3224418919fSjohnjiang 	uint32_t queue_count;
3234418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
3244418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
3254418919fSjohnjiang 			    "Queue count get failed");
3264418919fSjohnjiang 	TEST_ASSERT_EQUAL(queue_count, info.max_event_queues,
3274418919fSjohnjiang 			  "Wrong queue count");
3284418919fSjohnjiang 
3294418919fSjohnjiang 	return TEST_SUCCESS;
3304418919fSjohnjiang }
3314418919fSjohnjiang 
3324418919fSjohnjiang static int
test_eventdev_queue_attr_priority(void)3334418919fSjohnjiang test_eventdev_queue_attr_priority(void)
3344418919fSjohnjiang {
3354418919fSjohnjiang 	int i, ret;
3364418919fSjohnjiang 	struct rte_event_dev_info info;
3374418919fSjohnjiang 	struct rte_event_queue_conf qconf;
3384418919fSjohnjiang 	uint8_t priority;
3394418919fSjohnjiang 
3404418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
3414418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
3424418919fSjohnjiang 
3434418919fSjohnjiang 	uint32_t queue_count;
3444418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
3454418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
3464418919fSjohnjiang 			    "Queue count get failed");
3474418919fSjohnjiang 
3484418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
3494418919fSjohnjiang 		ret = rte_event_queue_default_conf_get(TEST_DEV_ID, i,
3504418919fSjohnjiang 					&qconf);
3514418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to get queue%d def conf", i);
3524418919fSjohnjiang 		qconf.priority = i %  RTE_EVENT_DEV_PRIORITY_LOWEST;
3534418919fSjohnjiang 		ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf);
3544418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i);
3554418919fSjohnjiang 	}
3564418919fSjohnjiang 
3574418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
3584418919fSjohnjiang 		uint32_t tmp;
3594418919fSjohnjiang 		TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i,
3604418919fSjohnjiang 				    RTE_EVENT_QUEUE_ATTR_PRIORITY, &tmp),
3614418919fSjohnjiang 				    "Queue priority get failed");
3624418919fSjohnjiang 		priority = tmp;
3634418919fSjohnjiang 
3644418919fSjohnjiang 		if (info.event_dev_cap & RTE_EVENT_DEV_CAP_QUEUE_QOS)
3654418919fSjohnjiang 			TEST_ASSERT_EQUAL(priority,
3664418919fSjohnjiang 			 i %  RTE_EVENT_DEV_PRIORITY_LOWEST,
3674418919fSjohnjiang 			 "Wrong priority value for queue%d", i);
3684418919fSjohnjiang 		else
3694418919fSjohnjiang 			TEST_ASSERT_EQUAL(priority,
3704418919fSjohnjiang 			 RTE_EVENT_DEV_PRIORITY_NORMAL,
3714418919fSjohnjiang 			 "Wrong priority value for queue%d", i);
3724418919fSjohnjiang 	}
3734418919fSjohnjiang 
3744418919fSjohnjiang 	return TEST_SUCCESS;
3754418919fSjohnjiang }
3764418919fSjohnjiang 
3774418919fSjohnjiang static int
test_eventdev_queue_attr_nb_atomic_flows(void)3784418919fSjohnjiang test_eventdev_queue_attr_nb_atomic_flows(void)
3794418919fSjohnjiang {
3804418919fSjohnjiang 	int i, ret;
3814418919fSjohnjiang 	struct rte_event_dev_info info;
3824418919fSjohnjiang 	struct rte_event_queue_conf qconf;
3834418919fSjohnjiang 	uint32_t nb_atomic_flows;
3844418919fSjohnjiang 
3854418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
3864418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
3874418919fSjohnjiang 
3884418919fSjohnjiang 	uint32_t queue_count;
3894418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
3904418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
3914418919fSjohnjiang 			    "Queue count get failed");
3924418919fSjohnjiang 
3934418919fSjohnjiang 	ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf);
3944418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get queue 0's def conf");
3954418919fSjohnjiang 
3964418919fSjohnjiang 	if (qconf.nb_atomic_flows == 0)
3974418919fSjohnjiang 		/* Assume PMD doesn't support atomic flows, return early */
3984418919fSjohnjiang 		return -ENOTSUP;
3994418919fSjohnjiang 
4004418919fSjohnjiang 	qconf.schedule_type = RTE_SCHED_TYPE_ATOMIC;
4014418919fSjohnjiang 
4024418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
4034418919fSjohnjiang 		ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf);
4044418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i);
4054418919fSjohnjiang 	}
4064418919fSjohnjiang 
4074418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
4084418919fSjohnjiang 		TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i,
4094418919fSjohnjiang 				    RTE_EVENT_QUEUE_ATTR_NB_ATOMIC_FLOWS,
4104418919fSjohnjiang 				    &nb_atomic_flows),
4114418919fSjohnjiang 				    "Queue nb_atomic_flows get failed");
4124418919fSjohnjiang 
4134418919fSjohnjiang 		TEST_ASSERT_EQUAL(nb_atomic_flows, qconf.nb_atomic_flows,
4144418919fSjohnjiang 				  "Wrong atomic flows value for queue%d", i);
4154418919fSjohnjiang 	}
4164418919fSjohnjiang 
4174418919fSjohnjiang 	return TEST_SUCCESS;
4184418919fSjohnjiang }
4194418919fSjohnjiang 
4204418919fSjohnjiang static int
test_eventdev_queue_attr_nb_atomic_order_sequences(void)4214418919fSjohnjiang test_eventdev_queue_attr_nb_atomic_order_sequences(void)
4224418919fSjohnjiang {
4234418919fSjohnjiang 	int i, ret;
4244418919fSjohnjiang 	struct rte_event_dev_info info;
4254418919fSjohnjiang 	struct rte_event_queue_conf qconf;
4264418919fSjohnjiang 	uint32_t nb_atomic_order_sequences;
4274418919fSjohnjiang 
4284418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
4294418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
4304418919fSjohnjiang 
4314418919fSjohnjiang 	uint32_t queue_count;
4324418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
4334418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
4344418919fSjohnjiang 			    "Queue count get failed");
4354418919fSjohnjiang 
4364418919fSjohnjiang 	ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf);
4374418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get queue 0's def conf");
4384418919fSjohnjiang 
4394418919fSjohnjiang 	if (qconf.nb_atomic_order_sequences == 0)
4404418919fSjohnjiang 		/* Assume PMD doesn't support reordering */
4414418919fSjohnjiang 		return -ENOTSUP;
4424418919fSjohnjiang 
4434418919fSjohnjiang 	qconf.schedule_type = RTE_SCHED_TYPE_ORDERED;
4444418919fSjohnjiang 
4454418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
4464418919fSjohnjiang 		ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf);
4474418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i);
4484418919fSjohnjiang 	}
4494418919fSjohnjiang 
4504418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
4514418919fSjohnjiang 		TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i,
4524418919fSjohnjiang 			    RTE_EVENT_QUEUE_ATTR_NB_ATOMIC_ORDER_SEQUENCES,
4534418919fSjohnjiang 			    &nb_atomic_order_sequences),
4544418919fSjohnjiang 			    "Queue nb_atomic_order_sequencess get failed");
4554418919fSjohnjiang 
4564418919fSjohnjiang 		TEST_ASSERT_EQUAL(nb_atomic_order_sequences,
4574418919fSjohnjiang 				  qconf.nb_atomic_order_sequences,
4584418919fSjohnjiang 				  "Wrong atomic order sequences value for queue%d",
4594418919fSjohnjiang 				  i);
4604418919fSjohnjiang 	}
4614418919fSjohnjiang 
4624418919fSjohnjiang 	return TEST_SUCCESS;
4634418919fSjohnjiang }
4644418919fSjohnjiang 
4654418919fSjohnjiang static int
test_eventdev_queue_attr_event_queue_cfg(void)4664418919fSjohnjiang test_eventdev_queue_attr_event_queue_cfg(void)
4674418919fSjohnjiang {
4684418919fSjohnjiang 	int i, ret;
4694418919fSjohnjiang 	struct rte_event_dev_info info;
4704418919fSjohnjiang 	struct rte_event_queue_conf qconf;
4714418919fSjohnjiang 	uint32_t event_queue_cfg;
4724418919fSjohnjiang 
4734418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
4744418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
4754418919fSjohnjiang 
4764418919fSjohnjiang 	uint32_t queue_count;
4774418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
4784418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
4794418919fSjohnjiang 			    "Queue count get failed");
4804418919fSjohnjiang 
4814418919fSjohnjiang 	ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf);
4824418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get queue0 def conf");
4834418919fSjohnjiang 
4844418919fSjohnjiang 	qconf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK;
4854418919fSjohnjiang 
4864418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
4874418919fSjohnjiang 		ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf);
4884418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i);
4894418919fSjohnjiang 	}
4904418919fSjohnjiang 
4914418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
4924418919fSjohnjiang 		TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i,
4934418919fSjohnjiang 				    RTE_EVENT_QUEUE_ATTR_EVENT_QUEUE_CFG,
4944418919fSjohnjiang 				    &event_queue_cfg),
4954418919fSjohnjiang 				    "Queue event_queue_cfg get failed");
4964418919fSjohnjiang 
4974418919fSjohnjiang 		TEST_ASSERT_EQUAL(event_queue_cfg, qconf.event_queue_cfg,
4984418919fSjohnjiang 				  "Wrong event_queue_cfg value for queue%d",
4994418919fSjohnjiang 				  i);
5004418919fSjohnjiang 	}
5014418919fSjohnjiang 
5024418919fSjohnjiang 	return TEST_SUCCESS;
5034418919fSjohnjiang }
5044418919fSjohnjiang 
5054418919fSjohnjiang static int
test_eventdev_port_default_conf_get(void)5064418919fSjohnjiang test_eventdev_port_default_conf_get(void)
5074418919fSjohnjiang {
5084418919fSjohnjiang 	int i, ret;
5094418919fSjohnjiang 	struct rte_event_port_conf pconf;
5104418919fSjohnjiang 
5114418919fSjohnjiang 	ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, NULL);
5124418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
5134418919fSjohnjiang 
5144418919fSjohnjiang 	uint32_t port_count;
5154418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
5164418919fSjohnjiang 				RTE_EVENT_DEV_ATTR_PORT_COUNT,
5174418919fSjohnjiang 				&port_count), "Port count get failed");
5184418919fSjohnjiang 
5194418919fSjohnjiang 	ret = rte_event_port_default_conf_get(TEST_DEV_ID,
5204418919fSjohnjiang 			port_count + 1, NULL);
5214418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
5224418919fSjohnjiang 
5234418919fSjohnjiang 	for (i = 0; i < (int)port_count; i++) {
5244418919fSjohnjiang 		ret = rte_event_port_default_conf_get(TEST_DEV_ID, i,
5254418919fSjohnjiang 							&pconf);
5264418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to get port%d info", i);
5274418919fSjohnjiang 	}
5284418919fSjohnjiang 
5294418919fSjohnjiang 	return TEST_SUCCESS;
5304418919fSjohnjiang }
5314418919fSjohnjiang 
5324418919fSjohnjiang static int
test_eventdev_port_setup(void)5334418919fSjohnjiang test_eventdev_port_setup(void)
5344418919fSjohnjiang {
5354418919fSjohnjiang 	int i, ret;
5364418919fSjohnjiang 	struct rte_event_dev_info info;
5374418919fSjohnjiang 	struct rte_event_port_conf pconf;
5384418919fSjohnjiang 
5394418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
5404418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
5414418919fSjohnjiang 
5424418919fSjohnjiang 	/* Negative cases */
5434418919fSjohnjiang 	ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf);
5444418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info");
5454418919fSjohnjiang 	pconf.new_event_threshold = info.max_num_events + 1;
5464418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
5474418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
5484418919fSjohnjiang 
5494418919fSjohnjiang 	pconf.new_event_threshold = info.max_num_events;
5504418919fSjohnjiang 	pconf.dequeue_depth = info.max_event_port_dequeue_depth + 1;
5514418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
5524418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
5534418919fSjohnjiang 
5544418919fSjohnjiang 	pconf.dequeue_depth = info.max_event_port_dequeue_depth;
5554418919fSjohnjiang 	pconf.enqueue_depth = info.max_event_port_enqueue_depth + 1;
5564418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
5574418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
5584418919fSjohnjiang 
5594418919fSjohnjiang 	if (!(info.event_dev_cap &
5604418919fSjohnjiang 	      RTE_EVENT_DEV_CAP_IMPLICIT_RELEASE_DISABLE)) {
5614418919fSjohnjiang 		pconf.enqueue_depth = info.max_event_port_enqueue_depth;
562*2d9fd380Sjfb8856606 		pconf.event_port_cfg = RTE_EVENT_PORT_CFG_DISABLE_IMPL_REL;
5634418919fSjohnjiang 		ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
5644418919fSjohnjiang 		TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
565*2d9fd380Sjfb8856606 		pconf.event_port_cfg = 0;
5664418919fSjohnjiang 	}
5674418919fSjohnjiang 
5684418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, info.max_event_ports,
5694418919fSjohnjiang 					&pconf);
5704418919fSjohnjiang 	TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret);
5714418919fSjohnjiang 
5724418919fSjohnjiang 	/* Positive case */
5734418919fSjohnjiang 	ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf);
5744418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info");
5754418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
5764418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to setup port0");
5774418919fSjohnjiang 
5784418919fSjohnjiang 	uint32_t port_count;
5794418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
5804418919fSjohnjiang 				RTE_EVENT_DEV_ATTR_PORT_COUNT,
5814418919fSjohnjiang 				&port_count), "Port count get failed");
5824418919fSjohnjiang 
5834418919fSjohnjiang 	for (i = 0; i < (int)port_count; i++) {
5844418919fSjohnjiang 		ret = rte_event_port_setup(TEST_DEV_ID, i, NULL);
5854418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup port%d", i);
5864418919fSjohnjiang 	}
5874418919fSjohnjiang 
5884418919fSjohnjiang 	return TEST_SUCCESS;
5894418919fSjohnjiang }
5904418919fSjohnjiang 
5914418919fSjohnjiang static int
test_eventdev_port_attr_dequeue_depth(void)5924418919fSjohnjiang test_eventdev_port_attr_dequeue_depth(void)
5934418919fSjohnjiang {
5944418919fSjohnjiang 	int ret;
5954418919fSjohnjiang 	struct rte_event_dev_info info;
5964418919fSjohnjiang 	struct rte_event_port_conf pconf;
5974418919fSjohnjiang 
5984418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
5994418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
6004418919fSjohnjiang 
6014418919fSjohnjiang 	ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf);
6024418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info");
6034418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
6044418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to setup port0");
6054418919fSjohnjiang 
6064418919fSjohnjiang 	uint32_t value;
6074418919fSjohnjiang 	TEST_ASSERT_EQUAL(rte_event_port_attr_get(TEST_DEV_ID, 0,
6084418919fSjohnjiang 			RTE_EVENT_PORT_ATTR_DEQ_DEPTH, &value),
6094418919fSjohnjiang 			0, "Call to get port dequeue depth failed");
6104418919fSjohnjiang 	TEST_ASSERT_EQUAL(value, pconf.dequeue_depth,
6114418919fSjohnjiang 			"Wrong port dequeue depth");
6124418919fSjohnjiang 
6134418919fSjohnjiang 	return TEST_SUCCESS;
6144418919fSjohnjiang }
6154418919fSjohnjiang 
6164418919fSjohnjiang static int
test_eventdev_port_attr_enqueue_depth(void)6174418919fSjohnjiang test_eventdev_port_attr_enqueue_depth(void)
6184418919fSjohnjiang {
6194418919fSjohnjiang 	int ret;
6204418919fSjohnjiang 	struct rte_event_dev_info info;
6214418919fSjohnjiang 	struct rte_event_port_conf pconf;
6224418919fSjohnjiang 
6234418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
6244418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
6254418919fSjohnjiang 
6264418919fSjohnjiang 	ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf);
6274418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info");
6284418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
6294418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to setup port0");
6304418919fSjohnjiang 
6314418919fSjohnjiang 	uint32_t value;
6324418919fSjohnjiang 	TEST_ASSERT_EQUAL(rte_event_port_attr_get(TEST_DEV_ID, 0,
6334418919fSjohnjiang 			RTE_EVENT_PORT_ATTR_ENQ_DEPTH, &value),
6344418919fSjohnjiang 			0, "Call to get port enqueue depth failed");
6354418919fSjohnjiang 	TEST_ASSERT_EQUAL(value, pconf.enqueue_depth,
6364418919fSjohnjiang 			"Wrong port enqueue depth");
6374418919fSjohnjiang 
6384418919fSjohnjiang 	return TEST_SUCCESS;
6394418919fSjohnjiang }
6404418919fSjohnjiang 
6414418919fSjohnjiang static int
test_eventdev_port_attr_new_event_threshold(void)6424418919fSjohnjiang test_eventdev_port_attr_new_event_threshold(void)
6434418919fSjohnjiang {
6444418919fSjohnjiang 	int ret;
6454418919fSjohnjiang 	struct rte_event_dev_info info;
6464418919fSjohnjiang 	struct rte_event_port_conf pconf;
6474418919fSjohnjiang 
6484418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
6494418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
6504418919fSjohnjiang 
6514418919fSjohnjiang 	ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf);
6524418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info");
6534418919fSjohnjiang 	ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf);
6544418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to setup port0");
6554418919fSjohnjiang 
6564418919fSjohnjiang 	uint32_t value;
6574418919fSjohnjiang 	TEST_ASSERT_EQUAL(rte_event_port_attr_get(TEST_DEV_ID, 0,
6584418919fSjohnjiang 			RTE_EVENT_PORT_ATTR_NEW_EVENT_THRESHOLD, &value),
6594418919fSjohnjiang 			0, "Call to get port new event threshold failed");
6604418919fSjohnjiang 	TEST_ASSERT_EQUAL((int32_t) value, pconf.new_event_threshold,
6614418919fSjohnjiang 			"Wrong port new event threshold");
6624418919fSjohnjiang 
6634418919fSjohnjiang 	return TEST_SUCCESS;
6644418919fSjohnjiang }
6654418919fSjohnjiang 
6664418919fSjohnjiang static int
test_eventdev_port_count(void)6674418919fSjohnjiang test_eventdev_port_count(void)
6684418919fSjohnjiang {
6694418919fSjohnjiang 	int ret;
6704418919fSjohnjiang 	struct rte_event_dev_info info;
6714418919fSjohnjiang 
6724418919fSjohnjiang 	ret = rte_event_dev_info_get(TEST_DEV_ID, &info);
6734418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info");
6744418919fSjohnjiang 
6754418919fSjohnjiang 	uint32_t port_count;
6764418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
6774418919fSjohnjiang 				RTE_EVENT_DEV_ATTR_PORT_COUNT,
6784418919fSjohnjiang 				&port_count), "Port count get failed");
6794418919fSjohnjiang 	TEST_ASSERT_EQUAL(port_count, info.max_event_ports, "Wrong port count");
6804418919fSjohnjiang 
6814418919fSjohnjiang 	return TEST_SUCCESS;
6824418919fSjohnjiang }
6834418919fSjohnjiang 
6844418919fSjohnjiang static int
test_eventdev_timeout_ticks(void)6854418919fSjohnjiang test_eventdev_timeout_ticks(void)
6864418919fSjohnjiang {
6874418919fSjohnjiang 	int ret;
6884418919fSjohnjiang 	uint64_t timeout_ticks;
6894418919fSjohnjiang 
6904418919fSjohnjiang 	ret = rte_event_dequeue_timeout_ticks(TEST_DEV_ID, 100, &timeout_ticks);
6914418919fSjohnjiang 	if (ret != -ENOTSUP)
6924418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Fail to get timeout_ticks");
6934418919fSjohnjiang 
6944418919fSjohnjiang 	return ret;
6954418919fSjohnjiang }
6964418919fSjohnjiang 
6974418919fSjohnjiang 
6984418919fSjohnjiang static int
test_eventdev_start_stop(void)6994418919fSjohnjiang test_eventdev_start_stop(void)
7004418919fSjohnjiang {
7014418919fSjohnjiang 	int i, ret;
7024418919fSjohnjiang 
7034418919fSjohnjiang 	ret = eventdev_configure_setup();
7044418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev");
7054418919fSjohnjiang 
7064418919fSjohnjiang 	uint32_t queue_count;
7074418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
7084418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
7094418919fSjohnjiang 			    "Queue count get failed");
7104418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
7114418919fSjohnjiang 		ret = rte_event_queue_setup(TEST_DEV_ID, i, NULL);
7124418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i);
7134418919fSjohnjiang 	}
7144418919fSjohnjiang 
7154418919fSjohnjiang 	uint32_t port_count;
7164418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
7174418919fSjohnjiang 				RTE_EVENT_DEV_ATTR_PORT_COUNT,
7184418919fSjohnjiang 				&port_count), "Port count get failed");
7194418919fSjohnjiang 
7204418919fSjohnjiang 	for (i = 0; i < (int)port_count; i++) {
7214418919fSjohnjiang 		ret = rte_event_port_setup(TEST_DEV_ID, i, NULL);
7224418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup port%d", i);
7234418919fSjohnjiang 	}
7244418919fSjohnjiang 
7254418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0);
7264418919fSjohnjiang 	TEST_ASSERT(ret == (int)queue_count, "Failed to link port, device %d",
7274418919fSjohnjiang 		    TEST_DEV_ID);
7284418919fSjohnjiang 
7294418919fSjohnjiang 	ret = rte_event_dev_start(TEST_DEV_ID);
7304418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to start device%d", TEST_DEV_ID);
7314418919fSjohnjiang 
7324418919fSjohnjiang 	rte_event_dev_stop(TEST_DEV_ID);
7334418919fSjohnjiang 	return TEST_SUCCESS;
7344418919fSjohnjiang }
7354418919fSjohnjiang 
7364418919fSjohnjiang 
7374418919fSjohnjiang static int
eventdev_setup_device(void)7384418919fSjohnjiang eventdev_setup_device(void)
7394418919fSjohnjiang {
7404418919fSjohnjiang 	int i, ret;
7414418919fSjohnjiang 
7424418919fSjohnjiang 	ret = eventdev_configure_setup();
7434418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev");
7444418919fSjohnjiang 
7454418919fSjohnjiang 	uint32_t queue_count;
7464418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
7474418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
7484418919fSjohnjiang 			    "Queue count get failed");
7494418919fSjohnjiang 	for (i = 0; i < (int)queue_count; i++) {
7504418919fSjohnjiang 		ret = rte_event_queue_setup(TEST_DEV_ID, i, NULL);
7514418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i);
7524418919fSjohnjiang 	}
7534418919fSjohnjiang 
7544418919fSjohnjiang 	uint32_t port_count;
7554418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
7564418919fSjohnjiang 				RTE_EVENT_DEV_ATTR_PORT_COUNT,
7574418919fSjohnjiang 				&port_count), "Port count get failed");
7584418919fSjohnjiang 
7594418919fSjohnjiang 	for (i = 0; i < (int)port_count; i++) {
7604418919fSjohnjiang 		ret = rte_event_port_setup(TEST_DEV_ID, i, NULL);
7614418919fSjohnjiang 		TEST_ASSERT_SUCCESS(ret, "Failed to setup port%d", i);
7624418919fSjohnjiang 	}
7634418919fSjohnjiang 
7644418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0);
7654418919fSjohnjiang 	TEST_ASSERT(ret == (int)queue_count, "Failed to link port, device %d",
7664418919fSjohnjiang 		    TEST_DEV_ID);
7674418919fSjohnjiang 
7684418919fSjohnjiang 	ret = rte_event_dev_start(TEST_DEV_ID);
7694418919fSjohnjiang 	TEST_ASSERT_SUCCESS(ret, "Failed to start device%d", TEST_DEV_ID);
7704418919fSjohnjiang 
7714418919fSjohnjiang 	return TEST_SUCCESS;
7724418919fSjohnjiang }
7734418919fSjohnjiang 
7744418919fSjohnjiang static void
eventdev_stop_device(void)7754418919fSjohnjiang eventdev_stop_device(void)
7764418919fSjohnjiang {
7774418919fSjohnjiang 	rte_event_dev_stop(TEST_DEV_ID);
7784418919fSjohnjiang }
7794418919fSjohnjiang 
7804418919fSjohnjiang static int
test_eventdev_link(void)7814418919fSjohnjiang test_eventdev_link(void)
7824418919fSjohnjiang {
7834418919fSjohnjiang 	int ret, nb_queues, i;
7844418919fSjohnjiang 	uint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV];
7854418919fSjohnjiang 	uint8_t priorities[RTE_EVENT_MAX_QUEUES_PER_DEV];
7864418919fSjohnjiang 
7874418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0);
7884418919fSjohnjiang 	TEST_ASSERT(ret >= 0, "Failed to link with NULL device%d",
7894418919fSjohnjiang 				 TEST_DEV_ID);
7904418919fSjohnjiang 
7914418919fSjohnjiang 	uint32_t queue_count;
7924418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
7934418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
7944418919fSjohnjiang 			    "Queue count get failed");
7954418919fSjohnjiang 	nb_queues = queue_count;
7964418919fSjohnjiang 	for (i = 0; i < nb_queues; i++) {
7974418919fSjohnjiang 		queues[i] = i;
7984418919fSjohnjiang 		priorities[i] = RTE_EVENT_DEV_PRIORITY_NORMAL;
7994418919fSjohnjiang 	}
8004418919fSjohnjiang 
8014418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, queues,
8024418919fSjohnjiang 					priorities, nb_queues);
8034418919fSjohnjiang 	TEST_ASSERT(ret == nb_queues, "Failed to link(device%d) ret=%d",
8044418919fSjohnjiang 				 TEST_DEV_ID, ret);
8054418919fSjohnjiang 	return TEST_SUCCESS;
8064418919fSjohnjiang }
8074418919fSjohnjiang 
8084418919fSjohnjiang static int
test_eventdev_unlink(void)8094418919fSjohnjiang test_eventdev_unlink(void)
8104418919fSjohnjiang {
8114418919fSjohnjiang 	int ret, nb_queues, i;
8124418919fSjohnjiang 	uint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV];
8134418919fSjohnjiang 
8144418919fSjohnjiang 	ret = rte_event_port_unlink(TEST_DEV_ID, 0, NULL, 0);
8154418919fSjohnjiang 	TEST_ASSERT(ret >= 0, "Failed to unlink with NULL device%d",
8164418919fSjohnjiang 				 TEST_DEV_ID);
8174418919fSjohnjiang 
8184418919fSjohnjiang 	uint32_t queue_count;
8194418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
8204418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
8214418919fSjohnjiang 			    "Queue count get failed");
8224418919fSjohnjiang 	nb_queues = queue_count;
8234418919fSjohnjiang 	for (i = 0; i < nb_queues; i++)
8244418919fSjohnjiang 		queues[i] = i;
8254418919fSjohnjiang 
8264418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0);
8274418919fSjohnjiang 	TEST_ASSERT(ret >= 0, "Failed to link with NULL device%d",
8284418919fSjohnjiang 				 TEST_DEV_ID);
8294418919fSjohnjiang 
8304418919fSjohnjiang 	ret = rte_event_port_unlink(TEST_DEV_ID, 0, queues, nb_queues);
8314418919fSjohnjiang 	TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d",
8324418919fSjohnjiang 				 TEST_DEV_ID, ret);
8334418919fSjohnjiang 	return TEST_SUCCESS;
8344418919fSjohnjiang }
8354418919fSjohnjiang 
8364418919fSjohnjiang static int
test_eventdev_link_get(void)8374418919fSjohnjiang test_eventdev_link_get(void)
8384418919fSjohnjiang {
8394418919fSjohnjiang 	int ret, i;
8404418919fSjohnjiang 	uint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV];
8414418919fSjohnjiang 	uint8_t priorities[RTE_EVENT_MAX_QUEUES_PER_DEV];
8424418919fSjohnjiang 
8434418919fSjohnjiang 	/* link all queues */
8444418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0);
8454418919fSjohnjiang 	TEST_ASSERT(ret >= 0, "Failed to link with NULL device%d",
8464418919fSjohnjiang 				 TEST_DEV_ID);
8474418919fSjohnjiang 
8484418919fSjohnjiang 	uint32_t queue_count;
8494418919fSjohnjiang 	TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID,
8504418919fSjohnjiang 			    RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count),
8514418919fSjohnjiang 			    "Queue count get failed");
8524418919fSjohnjiang 	const int nb_queues = queue_count;
8534418919fSjohnjiang 	for (i = 0; i < nb_queues; i++)
8544418919fSjohnjiang 		queues[i] = i;
8554418919fSjohnjiang 
8564418919fSjohnjiang 	ret = rte_event_port_unlink(TEST_DEV_ID, 0, queues, nb_queues);
8574418919fSjohnjiang 	TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d",
8584418919fSjohnjiang 				 TEST_DEV_ID, ret);
8594418919fSjohnjiang 
8604418919fSjohnjiang 	ret = rte_event_port_links_get(TEST_DEV_ID, 0, queues, priorities);
8614418919fSjohnjiang 	TEST_ASSERT(ret == 0, "(%d)Wrong link get=%d", TEST_DEV_ID, ret);
8624418919fSjohnjiang 
8634418919fSjohnjiang 	/* link all queues and get the links */
8644418919fSjohnjiang 	for (i = 0; i < nb_queues; i++) {
8654418919fSjohnjiang 		queues[i] = i;
8664418919fSjohnjiang 		priorities[i] = RTE_EVENT_DEV_PRIORITY_NORMAL;
8674418919fSjohnjiang 	}
8684418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, queues, priorities,
8694418919fSjohnjiang 					 nb_queues);
8704418919fSjohnjiang 	TEST_ASSERT(ret == nb_queues, "Failed to link(device%d) ret=%d",
8714418919fSjohnjiang 				 TEST_DEV_ID, ret);
8724418919fSjohnjiang 	ret = rte_event_port_links_get(TEST_DEV_ID, 0, queues, priorities);
8734418919fSjohnjiang 	TEST_ASSERT(ret == nb_queues, "(%d)Wrong link get ret=%d expected=%d",
8744418919fSjohnjiang 				 TEST_DEV_ID, ret, nb_queues);
8754418919fSjohnjiang 	/* unlink all*/
8764418919fSjohnjiang 	ret = rte_event_port_unlink(TEST_DEV_ID, 0, NULL, 0);
8774418919fSjohnjiang 	TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d",
8784418919fSjohnjiang 				 TEST_DEV_ID, ret);
8794418919fSjohnjiang 	/* link just one queue */
8804418919fSjohnjiang 	queues[0] = 0;
8814418919fSjohnjiang 	priorities[0] = RTE_EVENT_DEV_PRIORITY_NORMAL;
8824418919fSjohnjiang 
8834418919fSjohnjiang 	ret = rte_event_port_link(TEST_DEV_ID, 0, queues, priorities, 1);
8844418919fSjohnjiang 	TEST_ASSERT(ret == 1, "Failed to link(device%d) ret=%d",
8854418919fSjohnjiang 				 TEST_DEV_ID, ret);
8864418919fSjohnjiang 	ret = rte_event_port_links_get(TEST_DEV_ID, 0, queues, priorities);
8874418919fSjohnjiang 	TEST_ASSERT(ret == 1, "(%d)Wrong link get ret=%d expected=%d",
8884418919fSjohnjiang 					TEST_DEV_ID, ret, 1);
8894418919fSjohnjiang 	/* unlink the queue */
8904418919fSjohnjiang 	ret = rte_event_port_unlink(TEST_DEV_ID, 0, NULL, 0);
8914418919fSjohnjiang 	TEST_ASSERT(ret == 1, "Failed to unlink(device%d) ret=%d",
8924418919fSjohnjiang 				 TEST_DEV_ID, ret);
8934418919fSjohnjiang 
8944418919fSjohnjiang 	/* 4links and 2 unlinks */
8954418919fSjohnjiang 	if (nb_queues >= 4) {
8964418919fSjohnjiang 		for (i = 0; i < 4; i++) {
8974418919fSjohnjiang 			queues[i] = i;
8984418919fSjohnjiang 			priorities[i] = 0x40;
8994418919fSjohnjiang 		}
9004418919fSjohnjiang 		ret = rte_event_port_link(TEST_DEV_ID, 0, queues, priorities,
9014418919fSjohnjiang 						4);
9024418919fSjohnjiang 		TEST_ASSERT(ret == 4, "Failed to link(device%d) ret=%d",
9034418919fSjohnjiang 					 TEST_DEV_ID, ret);
9044418919fSjohnjiang 
9054418919fSjohnjiang 		for (i = 0; i < 2; i++)
9064418919fSjohnjiang 			queues[i] = i;
9074418919fSjohnjiang 
9084418919fSjohnjiang 		ret = rte_event_port_unlink(TEST_DEV_ID, 0, queues, 2);
9094418919fSjohnjiang 		TEST_ASSERT(ret == 2, "Failed to unlink(device%d) ret=%d",
9104418919fSjohnjiang 					 TEST_DEV_ID, ret);
9114418919fSjohnjiang 		ret = rte_event_port_links_get(TEST_DEV_ID, 0,
9124418919fSjohnjiang 						queues, priorities);
9134418919fSjohnjiang 		TEST_ASSERT(ret == 2, "(%d)Wrong link get ret=%d expected=%d",
9144418919fSjohnjiang 						TEST_DEV_ID, ret, 2);
9154418919fSjohnjiang 		TEST_ASSERT(queues[0] == 2, "ret=%d expected=%d", ret, 2);
9164418919fSjohnjiang 		TEST_ASSERT(priorities[0] == 0x40, "ret=%d expected=%d",
9174418919fSjohnjiang 							ret, 0x40);
9184418919fSjohnjiang 		TEST_ASSERT(queues[1] == 3, "ret=%d expected=%d", ret, 3);
9194418919fSjohnjiang 		TEST_ASSERT(priorities[1] == 0x40, "ret=%d expected=%d",
9204418919fSjohnjiang 					ret, 0x40);
9214418919fSjohnjiang 	}
9224418919fSjohnjiang 
9234418919fSjohnjiang 	return TEST_SUCCESS;
9244418919fSjohnjiang }
9254418919fSjohnjiang 
9264418919fSjohnjiang static int
test_eventdev_close(void)9274418919fSjohnjiang test_eventdev_close(void)
9284418919fSjohnjiang {
9294418919fSjohnjiang 	rte_event_dev_stop(TEST_DEV_ID);
9304418919fSjohnjiang 	return rte_event_dev_close(TEST_DEV_ID);
9314418919fSjohnjiang }
9324418919fSjohnjiang 
9334418919fSjohnjiang static struct unit_test_suite eventdev_common_testsuite  = {
9344418919fSjohnjiang 	.suite_name = "eventdev common code unit test suite",
9354418919fSjohnjiang 	.setup = testsuite_setup,
9364418919fSjohnjiang 	.teardown = testsuite_teardown,
9374418919fSjohnjiang 	.unit_test_cases = {
9384418919fSjohnjiang 		TEST_CASE_ST(NULL, NULL,
9394418919fSjohnjiang 			test_eventdev_count),
9404418919fSjohnjiang 		TEST_CASE_ST(NULL, NULL,
9414418919fSjohnjiang 			test_eventdev_get_dev_id),
9424418919fSjohnjiang 		TEST_CASE_ST(NULL, NULL,
9434418919fSjohnjiang 			test_eventdev_socket_id),
9444418919fSjohnjiang 		TEST_CASE_ST(NULL, NULL,
9454418919fSjohnjiang 			test_eventdev_info_get),
9464418919fSjohnjiang 		TEST_CASE_ST(NULL, NULL,
9474418919fSjohnjiang 			test_eventdev_configure),
9484418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9494418919fSjohnjiang 			test_eventdev_queue_default_conf_get),
9504418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9514418919fSjohnjiang 			test_eventdev_queue_setup),
9524418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9534418919fSjohnjiang 			test_eventdev_queue_count),
9544418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9554418919fSjohnjiang 			test_eventdev_queue_attr_priority),
9564418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9574418919fSjohnjiang 			test_eventdev_queue_attr_nb_atomic_flows),
9584418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9594418919fSjohnjiang 			test_eventdev_queue_attr_nb_atomic_order_sequences),
9604418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9614418919fSjohnjiang 			test_eventdev_queue_attr_event_queue_cfg),
9624418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9634418919fSjohnjiang 			test_eventdev_port_default_conf_get),
9644418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9654418919fSjohnjiang 			test_eventdev_port_setup),
9664418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9674418919fSjohnjiang 			test_eventdev_port_attr_dequeue_depth),
9684418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9694418919fSjohnjiang 			test_eventdev_port_attr_enqueue_depth),
9704418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9714418919fSjohnjiang 			test_eventdev_port_attr_new_event_threshold),
9724418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9734418919fSjohnjiang 			test_eventdev_port_count),
9744418919fSjohnjiang 		TEST_CASE_ST(eventdev_configure_setup, NULL,
9754418919fSjohnjiang 			test_eventdev_timeout_ticks),
9764418919fSjohnjiang 		TEST_CASE_ST(NULL, NULL,
9774418919fSjohnjiang 			test_eventdev_start_stop),
9784418919fSjohnjiang 		TEST_CASE_ST(eventdev_setup_device, eventdev_stop_device,
9794418919fSjohnjiang 			test_eventdev_link),
9804418919fSjohnjiang 		TEST_CASE_ST(eventdev_setup_device, eventdev_stop_device,
9814418919fSjohnjiang 			test_eventdev_unlink),
9824418919fSjohnjiang 		TEST_CASE_ST(eventdev_setup_device, eventdev_stop_device,
9834418919fSjohnjiang 			test_eventdev_link_get),
9844418919fSjohnjiang 		TEST_CASE_ST(eventdev_setup_device, NULL,
9854418919fSjohnjiang 			test_eventdev_close),
9864418919fSjohnjiang 		TEST_CASES_END() /**< NULL terminate unit test array */
9874418919fSjohnjiang 	}
9884418919fSjohnjiang };
9894418919fSjohnjiang 
9904418919fSjohnjiang static int
test_eventdev_common(void)9914418919fSjohnjiang test_eventdev_common(void)
9924418919fSjohnjiang {
9934418919fSjohnjiang 	return unit_test_suite_runner(&eventdev_common_testsuite);
9944418919fSjohnjiang }
9954418919fSjohnjiang 
9964418919fSjohnjiang static int
test_eventdev_selftest_impl(const char * pmd,const char * opts)9974418919fSjohnjiang test_eventdev_selftest_impl(const char *pmd, const char *opts)
9984418919fSjohnjiang {
9994418919fSjohnjiang 	int ret = 0;
10004418919fSjohnjiang 
10014418919fSjohnjiang 	if (rte_event_dev_get_dev_id(pmd) == -ENODEV)
10024418919fSjohnjiang 		ret = rte_vdev_init(pmd, opts);
10034418919fSjohnjiang 	if (ret)
10044418919fSjohnjiang 		return TEST_SKIPPED;
10054418919fSjohnjiang 
10064418919fSjohnjiang 	return rte_event_dev_selftest(rte_event_dev_get_dev_id(pmd));
10074418919fSjohnjiang }
10084418919fSjohnjiang 
10094418919fSjohnjiang static int
test_eventdev_selftest_sw(void)10104418919fSjohnjiang test_eventdev_selftest_sw(void)
10114418919fSjohnjiang {
10124418919fSjohnjiang 	return test_eventdev_selftest_impl("event_sw", "");
10134418919fSjohnjiang }
10144418919fSjohnjiang 
10154418919fSjohnjiang static int
test_eventdev_selftest_octeontx(void)10164418919fSjohnjiang test_eventdev_selftest_octeontx(void)
10174418919fSjohnjiang {
10184418919fSjohnjiang 	return test_eventdev_selftest_impl("event_octeontx", "");
10194418919fSjohnjiang }
10204418919fSjohnjiang 
10214418919fSjohnjiang static int
test_eventdev_selftest_octeontx2(void)10224418919fSjohnjiang test_eventdev_selftest_octeontx2(void)
10234418919fSjohnjiang {
10244418919fSjohnjiang 	return test_eventdev_selftest_impl("event_octeontx2", "");
10254418919fSjohnjiang }
10264418919fSjohnjiang 
10274418919fSjohnjiang static int
test_eventdev_selftest_dpaa2(void)10284418919fSjohnjiang test_eventdev_selftest_dpaa2(void)
10294418919fSjohnjiang {
10304418919fSjohnjiang 	return test_eventdev_selftest_impl("event_dpaa2", "");
10314418919fSjohnjiang }
10324418919fSjohnjiang 
1033*2d9fd380Sjfb8856606 static int
test_eventdev_selftest_dlb(void)1034*2d9fd380Sjfb8856606 test_eventdev_selftest_dlb(void)
1035*2d9fd380Sjfb8856606 {
1036*2d9fd380Sjfb8856606 	return test_eventdev_selftest_impl("dlb_event", "");
1037*2d9fd380Sjfb8856606 }
1038*2d9fd380Sjfb8856606 
1039*2d9fd380Sjfb8856606 static int
test_eventdev_selftest_dlb2(void)1040*2d9fd380Sjfb8856606 test_eventdev_selftest_dlb2(void)
1041*2d9fd380Sjfb8856606 {
1042*2d9fd380Sjfb8856606 	return test_eventdev_selftest_impl("dlb2_event", "");
1043*2d9fd380Sjfb8856606 }
1044*2d9fd380Sjfb8856606 
10454418919fSjohnjiang REGISTER_TEST_COMMAND(eventdev_common_autotest, test_eventdev_common);
10464418919fSjohnjiang REGISTER_TEST_COMMAND(eventdev_selftest_sw, test_eventdev_selftest_sw);
10474418919fSjohnjiang REGISTER_TEST_COMMAND(eventdev_selftest_octeontx,
10484418919fSjohnjiang 		test_eventdev_selftest_octeontx);
10494418919fSjohnjiang REGISTER_TEST_COMMAND(eventdev_selftest_octeontx2,
10504418919fSjohnjiang 		test_eventdev_selftest_octeontx2);
10514418919fSjohnjiang REGISTER_TEST_COMMAND(eventdev_selftest_dpaa2, test_eventdev_selftest_dpaa2);
1052*2d9fd380Sjfb8856606 REGISTER_TEST_COMMAND(eventdev_selftest_dlb, test_eventdev_selftest_dlb);
1053*2d9fd380Sjfb8856606 REGISTER_TEST_COMMAND(eventdev_selftest_dlb2, test_eventdev_selftest_dlb2);
1054