1a9de470cSBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 2a9de470cSBruce Richardson * Copyright(c) 2016 Cavium, Inc 3a9de470cSBruce Richardson */ 4a9de470cSBruce Richardson 53c60274cSJie Zhou #include "test.h" 63c60274cSJie Zhou 7a9de470cSBruce Richardson #include <rte_common.h> 8a9de470cSBruce Richardson #include <rte_hexdump.h> 9a9de470cSBruce Richardson #include <rte_mbuf.h> 10a9de470cSBruce Richardson #include <rte_malloc.h> 11a9de470cSBruce Richardson #include <rte_memcpy.h> 123c60274cSJie Zhou 133c60274cSJie Zhou #ifdef RTE_EXEC_ENV_WINDOWS 143c60274cSJie Zhou static int 153c60274cSJie Zhou test_eventdev_common(void) 163c60274cSJie Zhou { 173c60274cSJie Zhou printf("eventdev_common not supported on Windows, skipping test\n"); 183c60274cSJie Zhou return TEST_SKIPPED; 193c60274cSJie Zhou } 203c60274cSJie Zhou 213c60274cSJie Zhou #else 223c60274cSJie Zhou 23a9de470cSBruce Richardson #include <rte_eventdev.h> 24a9de470cSBruce Richardson #include <rte_dev.h> 25a9de470cSBruce Richardson #include <rte_bus_vdev.h> 26a9de470cSBruce Richardson 27a9de470cSBruce Richardson #define TEST_DEV_ID 0 28a9de470cSBruce Richardson 29a9de470cSBruce Richardson static int 30a9de470cSBruce Richardson testsuite_setup(void) 31a9de470cSBruce Richardson { 32a9de470cSBruce Richardson RTE_BUILD_BUG_ON(sizeof(struct rte_event) != 16); 33a9de470cSBruce Richardson uint8_t count; 34a9de470cSBruce Richardson count = rte_event_dev_count(); 35a9de470cSBruce Richardson if (!count) { 36f1caf6ffSDavid Marchand int ret; 37f1caf6ffSDavid Marchand 38a9de470cSBruce Richardson printf("Failed to find a valid event device," 39f1caf6ffSDavid Marchand " trying with event_skeleton device\n"); 40f1caf6ffSDavid Marchand ret = rte_vdev_init("event_skeleton", NULL); 41f1caf6ffSDavid Marchand if (ret != 0) { 42f1caf6ffSDavid Marchand printf("No event device, skipping\n"); 43f1caf6ffSDavid Marchand return TEST_SKIPPED; 44f1caf6ffSDavid Marchand } 45a9de470cSBruce Richardson } 46a9de470cSBruce Richardson return TEST_SUCCESS; 47a9de470cSBruce Richardson } 48a9de470cSBruce Richardson 49a9de470cSBruce Richardson static void 50a9de470cSBruce Richardson testsuite_teardown(void) 51a9de470cSBruce Richardson { 52a9de470cSBruce Richardson } 53a9de470cSBruce Richardson 54a9de470cSBruce Richardson static int 55a9de470cSBruce Richardson test_eventdev_count(void) 56a9de470cSBruce Richardson { 57a9de470cSBruce Richardson uint8_t count; 58a9de470cSBruce Richardson count = rte_event_dev_count(); 59a9de470cSBruce Richardson TEST_ASSERT(count > 0, "Invalid eventdev count %" PRIu8, count); 60a9de470cSBruce Richardson return TEST_SUCCESS; 61a9de470cSBruce Richardson } 62a9de470cSBruce Richardson 63a9de470cSBruce Richardson static int 64a9de470cSBruce Richardson test_eventdev_get_dev_id(void) 65a9de470cSBruce Richardson { 66a9de470cSBruce Richardson int ret; 67a9de470cSBruce Richardson ret = rte_event_dev_get_dev_id("not_a_valid_eventdev_driver"); 68a9de470cSBruce Richardson TEST_ASSERT_FAIL(ret, "Expected <0 for invalid dev name ret=%d", ret); 69a9de470cSBruce Richardson return TEST_SUCCESS; 70a9de470cSBruce Richardson } 71a9de470cSBruce Richardson 72a9de470cSBruce Richardson static int 73a9de470cSBruce Richardson test_eventdev_socket_id(void) 74a9de470cSBruce Richardson { 75a9de470cSBruce Richardson int socket_id; 76a9de470cSBruce Richardson socket_id = rte_event_dev_socket_id(TEST_DEV_ID); 77a9de470cSBruce Richardson TEST_ASSERT(socket_id != -EINVAL, "Failed to get socket_id %d", 78a9de470cSBruce Richardson socket_id); 79a9de470cSBruce Richardson socket_id = rte_event_dev_socket_id(RTE_EVENT_MAX_DEVS); 80a9de470cSBruce Richardson TEST_ASSERT(socket_id == -EINVAL, "Expected -EINVAL %d", socket_id); 81a9de470cSBruce Richardson 82a9de470cSBruce Richardson return TEST_SUCCESS; 83a9de470cSBruce Richardson } 84a9de470cSBruce Richardson 85a9de470cSBruce Richardson static int 86a9de470cSBruce Richardson test_eventdev_info_get(void) 87a9de470cSBruce Richardson { 88a9de470cSBruce Richardson int ret; 89a9de470cSBruce Richardson struct rte_event_dev_info info; 90a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, NULL); 91a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 92a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 93a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 94a9de470cSBruce Richardson TEST_ASSERT(info.max_event_ports > 0, 95a9de470cSBruce Richardson "Not enough event ports %d", info.max_event_ports); 96a9de470cSBruce Richardson TEST_ASSERT(info.max_event_queues > 0, 97a9de470cSBruce Richardson "Not enough event queues %d", info.max_event_queues); 98a9de470cSBruce Richardson return TEST_SUCCESS; 99a9de470cSBruce Richardson } 100a9de470cSBruce Richardson 101a9de470cSBruce Richardson static inline void 102a9de470cSBruce Richardson devconf_set_default_sane_values(struct rte_event_dev_config *dev_conf, 103a9de470cSBruce Richardson struct rte_event_dev_info *info) 104a9de470cSBruce Richardson { 105a9de470cSBruce Richardson memset(dev_conf, 0, sizeof(struct rte_event_dev_config)); 106a9de470cSBruce Richardson dev_conf->dequeue_timeout_ns = info->min_dequeue_timeout_ns; 107a9de470cSBruce Richardson dev_conf->nb_event_ports = info->max_event_ports; 108a9de470cSBruce Richardson dev_conf->nb_event_queues = info->max_event_queues; 109a9de470cSBruce Richardson dev_conf->nb_event_queue_flows = info->max_event_queue_flows; 110a9de470cSBruce Richardson dev_conf->nb_event_port_dequeue_depth = 111a9de470cSBruce Richardson info->max_event_port_dequeue_depth; 112a9de470cSBruce Richardson dev_conf->nb_event_port_enqueue_depth = 113a9de470cSBruce Richardson info->max_event_port_enqueue_depth; 114a9de470cSBruce Richardson dev_conf->nb_event_port_enqueue_depth = 115a9de470cSBruce Richardson info->max_event_port_enqueue_depth; 116a9de470cSBruce Richardson dev_conf->nb_events_limit = 117a9de470cSBruce Richardson info->max_num_events; 118a9de470cSBruce Richardson } 119a9de470cSBruce Richardson 120a9de470cSBruce Richardson static int 121a9de470cSBruce Richardson test_ethdev_config_run(struct rte_event_dev_config *dev_conf, 122a9de470cSBruce Richardson struct rte_event_dev_info *info, 123a9de470cSBruce Richardson void (*fn)(struct rte_event_dev_config *dev_conf, 124a9de470cSBruce Richardson struct rte_event_dev_info *info)) 125a9de470cSBruce Richardson { 126a9de470cSBruce Richardson devconf_set_default_sane_values(dev_conf, info); 127a9de470cSBruce Richardson fn(dev_conf, info); 128a9de470cSBruce Richardson return rte_event_dev_configure(TEST_DEV_ID, dev_conf); 129a9de470cSBruce Richardson } 130a9de470cSBruce Richardson 131a9de470cSBruce Richardson static void 132a9de470cSBruce Richardson max_dequeue_limit(struct rte_event_dev_config *dev_conf, 133a9de470cSBruce Richardson struct rte_event_dev_info *info) 134a9de470cSBruce Richardson { 135a9de470cSBruce Richardson dev_conf->dequeue_timeout_ns = info->max_dequeue_timeout_ns + 1; 136a9de470cSBruce Richardson } 137a9de470cSBruce Richardson 138a9de470cSBruce Richardson static void 139a9de470cSBruce Richardson max_events_limit(struct rte_event_dev_config *dev_conf, 140a9de470cSBruce Richardson struct rte_event_dev_info *info) 141a9de470cSBruce Richardson { 142a9de470cSBruce Richardson dev_conf->nb_events_limit = info->max_num_events + 1; 143a9de470cSBruce Richardson } 144a9de470cSBruce Richardson 145a9de470cSBruce Richardson static void 146a9de470cSBruce Richardson max_event_ports(struct rte_event_dev_config *dev_conf, 147a9de470cSBruce Richardson struct rte_event_dev_info *info) 148a9de470cSBruce Richardson { 149a9de470cSBruce Richardson dev_conf->nb_event_ports = info->max_event_ports + 1; 150a9de470cSBruce Richardson } 151a9de470cSBruce Richardson 152a9de470cSBruce Richardson static void 153a9de470cSBruce Richardson max_event_queues(struct rte_event_dev_config *dev_conf, 154a9de470cSBruce Richardson struct rte_event_dev_info *info) 155a9de470cSBruce Richardson { 156a9de470cSBruce Richardson dev_conf->nb_event_queues = info->max_event_queues + 1; 157a9de470cSBruce Richardson } 158a9de470cSBruce Richardson 159a9de470cSBruce Richardson static void 160a9de470cSBruce Richardson max_event_queue_flows(struct rte_event_dev_config *dev_conf, 161a9de470cSBruce Richardson struct rte_event_dev_info *info) 162a9de470cSBruce Richardson { 163a9de470cSBruce Richardson dev_conf->nb_event_queue_flows = info->max_event_queue_flows + 1; 164a9de470cSBruce Richardson } 165a9de470cSBruce Richardson 166a9de470cSBruce Richardson static void 167a9de470cSBruce Richardson max_event_port_dequeue_depth(struct rte_event_dev_config *dev_conf, 168a9de470cSBruce Richardson struct rte_event_dev_info *info) 169a9de470cSBruce Richardson { 170a9de470cSBruce Richardson dev_conf->nb_event_port_dequeue_depth = 171a9de470cSBruce Richardson info->max_event_port_dequeue_depth + 1; 172a9de470cSBruce Richardson } 173a9de470cSBruce Richardson 174a9de470cSBruce Richardson static void 175a9de470cSBruce Richardson max_event_port_enqueue_depth(struct rte_event_dev_config *dev_conf, 176a9de470cSBruce Richardson struct rte_event_dev_info *info) 177a9de470cSBruce Richardson { 178a9de470cSBruce Richardson dev_conf->nb_event_port_enqueue_depth = 179a9de470cSBruce Richardson info->max_event_port_enqueue_depth + 1; 180a9de470cSBruce Richardson } 181a9de470cSBruce Richardson 182a9de470cSBruce Richardson 183a9de470cSBruce Richardson static int 184a9de470cSBruce Richardson test_eventdev_configure(void) 185a9de470cSBruce Richardson { 186a9de470cSBruce Richardson int ret; 187a9de470cSBruce Richardson struct rte_event_dev_config dev_conf; 188a9de470cSBruce Richardson struct rte_event_dev_info info; 189a9de470cSBruce Richardson ret = rte_event_dev_configure(TEST_DEV_ID, NULL); 190a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 191a9de470cSBruce Richardson 192a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 193a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 194a9de470cSBruce Richardson 195a9de470cSBruce Richardson /* Check limits */ 196a9de470cSBruce Richardson TEST_ASSERT_EQUAL(-EINVAL, 197a9de470cSBruce Richardson test_ethdev_config_run(&dev_conf, &info, max_dequeue_limit), 198a9de470cSBruce Richardson "Config negative test failed"); 199a9de470cSBruce Richardson TEST_ASSERT_EQUAL(-EINVAL, 200a9de470cSBruce Richardson test_ethdev_config_run(&dev_conf, &info, max_events_limit), 201a9de470cSBruce Richardson "Config negative test failed"); 202a9de470cSBruce Richardson TEST_ASSERT_EQUAL(-EINVAL, 203a9de470cSBruce Richardson test_ethdev_config_run(&dev_conf, &info, max_event_ports), 204a9de470cSBruce Richardson "Config negative test failed"); 205a9de470cSBruce Richardson TEST_ASSERT_EQUAL(-EINVAL, 206a9de470cSBruce Richardson test_ethdev_config_run(&dev_conf, &info, max_event_queues), 207a9de470cSBruce Richardson "Config negative test failed"); 208a9de470cSBruce Richardson TEST_ASSERT_EQUAL(-EINVAL, 209a9de470cSBruce Richardson test_ethdev_config_run(&dev_conf, &info, max_event_queue_flows), 210a9de470cSBruce Richardson "Config negative test failed"); 211a9de470cSBruce Richardson 212a9de470cSBruce Richardson if (info.event_dev_cap & RTE_EVENT_DEV_CAP_BURST_MODE) { 213a9de470cSBruce Richardson TEST_ASSERT_EQUAL(-EINVAL, 214a9de470cSBruce Richardson test_ethdev_config_run(&dev_conf, &info, 215a9de470cSBruce Richardson max_event_port_dequeue_depth), 216a9de470cSBruce Richardson "Config negative test failed"); 217a9de470cSBruce Richardson TEST_ASSERT_EQUAL(-EINVAL, 218a9de470cSBruce Richardson test_ethdev_config_run(&dev_conf, &info, 219a9de470cSBruce Richardson max_event_port_enqueue_depth), 220a9de470cSBruce Richardson "Config negative test failed"); 221a9de470cSBruce Richardson } 222a9de470cSBruce Richardson 223a9de470cSBruce Richardson /* Positive case */ 224a9de470cSBruce Richardson devconf_set_default_sane_values(&dev_conf, &info); 225a9de470cSBruce Richardson ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf); 226a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev"); 227a9de470cSBruce Richardson 228a9de470cSBruce Richardson /* re-configure */ 229a9de470cSBruce Richardson devconf_set_default_sane_values(&dev_conf, &info); 230a9de470cSBruce Richardson dev_conf.nb_event_ports = RTE_MAX(info.max_event_ports/2, 1); 231a9de470cSBruce Richardson dev_conf.nb_event_queues = RTE_MAX(info.max_event_queues/2, 1); 232a9de470cSBruce Richardson ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf); 233a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to re configure eventdev"); 234a9de470cSBruce Richardson 235a9de470cSBruce Richardson /* re-configure back to max_event_queues and max_event_ports */ 236a9de470cSBruce Richardson devconf_set_default_sane_values(&dev_conf, &info); 237a9de470cSBruce Richardson ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf); 238a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to re-configure eventdev"); 239a9de470cSBruce Richardson 240a9de470cSBruce Richardson return TEST_SUCCESS; 241a9de470cSBruce Richardson 242a9de470cSBruce Richardson } 243a9de470cSBruce Richardson 244a9de470cSBruce Richardson static int 245a9de470cSBruce Richardson eventdev_configure_setup(void) 246a9de470cSBruce Richardson { 247a9de470cSBruce Richardson int ret; 248a9de470cSBruce Richardson struct rte_event_dev_config dev_conf; 249a9de470cSBruce Richardson struct rte_event_dev_info info; 250a9de470cSBruce Richardson 251a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 252a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 253a9de470cSBruce Richardson devconf_set_default_sane_values(&dev_conf, &info); 254a9de470cSBruce Richardson ret = rte_event_dev_configure(TEST_DEV_ID, &dev_conf); 255a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev"); 256a9de470cSBruce Richardson 257a9de470cSBruce Richardson return TEST_SUCCESS; 258a9de470cSBruce Richardson } 259a9de470cSBruce Richardson 260a9de470cSBruce Richardson static int 261a9de470cSBruce Richardson test_eventdev_queue_default_conf_get(void) 262a9de470cSBruce Richardson { 263a9de470cSBruce Richardson int i, ret; 264a9de470cSBruce Richardson struct rte_event_queue_conf qconf; 265a9de470cSBruce Richardson 266a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, NULL); 267a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 268a9de470cSBruce Richardson 269a9de470cSBruce Richardson uint32_t queue_count; 270a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 271a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 272a9de470cSBruce Richardson "Queue count get failed"); 273a9de470cSBruce Richardson 274a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 275a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, i, 276a9de470cSBruce Richardson &qconf); 277a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get queue%d info", i); 278a9de470cSBruce Richardson } 279a9de470cSBruce Richardson 280a9de470cSBruce Richardson return TEST_SUCCESS; 281a9de470cSBruce Richardson } 282a9de470cSBruce Richardson 283a9de470cSBruce Richardson static int 284a9de470cSBruce Richardson test_eventdev_queue_setup(void) 285a9de470cSBruce Richardson { 286a9de470cSBruce Richardson int i, ret; 287a9de470cSBruce Richardson struct rte_event_dev_info info; 288a9de470cSBruce Richardson struct rte_event_queue_conf qconf; 289a9de470cSBruce Richardson 290a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 291a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 292a9de470cSBruce Richardson 293a9de470cSBruce Richardson /* Negative cases */ 294a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf); 295a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get queue0 info"); 296a9de470cSBruce Richardson qconf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; 297a9de470cSBruce Richardson qconf.nb_atomic_flows = info.max_event_queue_flows + 1; 298a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, 0, &qconf); 299a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 300a9de470cSBruce Richardson 301a9de470cSBruce Richardson qconf.nb_atomic_flows = info.max_event_queue_flows; 302a9de470cSBruce Richardson qconf.schedule_type = RTE_SCHED_TYPE_ORDERED; 303a9de470cSBruce Richardson qconf.nb_atomic_order_sequences = info.max_event_queue_flows + 1; 304a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, 0, &qconf); 305a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 306a9de470cSBruce Richardson 307a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, info.max_event_queues, 308a9de470cSBruce Richardson &qconf); 309a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 310a9de470cSBruce Richardson 311a9de470cSBruce Richardson /* Positive case */ 312a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf); 313a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get queue0 info"); 314a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, 0, &qconf); 315a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue0"); 316a9de470cSBruce Richardson 317a9de470cSBruce Richardson uint32_t queue_count; 318a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 319a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 320a9de470cSBruce Richardson "Queue count get failed"); 321a9de470cSBruce Richardson 3225c52220aSBruce Richardson for (i = 1; i < (int)queue_count; i++) { 323a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, i, NULL); 324a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 325a9de470cSBruce Richardson } 326a9de470cSBruce Richardson 327a9de470cSBruce Richardson return TEST_SUCCESS; 328a9de470cSBruce Richardson } 329a9de470cSBruce Richardson 330a9de470cSBruce Richardson static int 331a9de470cSBruce Richardson test_eventdev_queue_count(void) 332a9de470cSBruce Richardson { 333a9de470cSBruce Richardson int ret; 334a9de470cSBruce Richardson struct rte_event_dev_info info; 335a9de470cSBruce Richardson 336a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 337a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 338a9de470cSBruce Richardson 339a9de470cSBruce Richardson uint32_t queue_count; 340a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 341a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 342a9de470cSBruce Richardson "Queue count get failed"); 343a9de470cSBruce Richardson TEST_ASSERT_EQUAL(queue_count, info.max_event_queues, 344a9de470cSBruce Richardson "Wrong queue count"); 345a9de470cSBruce Richardson 346a9de470cSBruce Richardson return TEST_SUCCESS; 347a9de470cSBruce Richardson } 348a9de470cSBruce Richardson 349a9de470cSBruce Richardson static int 350a9de470cSBruce Richardson test_eventdev_queue_attr_priority(void) 351a9de470cSBruce Richardson { 352a9de470cSBruce Richardson int i, ret; 353a9de470cSBruce Richardson struct rte_event_dev_info info; 354a9de470cSBruce Richardson struct rte_event_queue_conf qconf; 355a9de470cSBruce Richardson uint8_t priority; 356a9de470cSBruce Richardson 357a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 358a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 359a9de470cSBruce Richardson 360a9de470cSBruce Richardson uint32_t queue_count; 361a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 362a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 363a9de470cSBruce Richardson "Queue count get failed"); 364a9de470cSBruce Richardson 365a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 366a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, i, 367a9de470cSBruce Richardson &qconf); 368a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get queue%d def conf", i); 369a9de470cSBruce Richardson qconf.priority = i % RTE_EVENT_DEV_PRIORITY_LOWEST; 370a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf); 371a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 372a9de470cSBruce Richardson } 373a9de470cSBruce Richardson 374a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 375a9de470cSBruce Richardson uint32_t tmp; 376a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i, 377a9de470cSBruce Richardson RTE_EVENT_QUEUE_ATTR_PRIORITY, &tmp), 378a9de470cSBruce Richardson "Queue priority get failed"); 379a9de470cSBruce Richardson priority = tmp; 380a9de470cSBruce Richardson 381a9de470cSBruce Richardson if (info.event_dev_cap & RTE_EVENT_DEV_CAP_QUEUE_QOS) 382a9de470cSBruce Richardson TEST_ASSERT_EQUAL(priority, 383a9de470cSBruce Richardson i % RTE_EVENT_DEV_PRIORITY_LOWEST, 384a9de470cSBruce Richardson "Wrong priority value for queue%d", i); 385a9de470cSBruce Richardson else 386a9de470cSBruce Richardson TEST_ASSERT_EQUAL(priority, 387a9de470cSBruce Richardson RTE_EVENT_DEV_PRIORITY_NORMAL, 388a9de470cSBruce Richardson "Wrong priority value for queue%d", i); 389a9de470cSBruce Richardson } 390a9de470cSBruce Richardson 391a9de470cSBruce Richardson return TEST_SUCCESS; 392a9de470cSBruce Richardson } 393a9de470cSBruce Richardson 394a9de470cSBruce Richardson static int 395deb450c4SShijith Thotton test_eventdev_queue_attr_priority_runtime(void) 396deb450c4SShijith Thotton { 397deb450c4SShijith Thotton uint32_t queue_count, queue_req, prio, deq_cnt; 398deb450c4SShijith Thotton struct rte_event_queue_conf qconf; 399deb450c4SShijith Thotton struct rte_event_port_conf pconf; 400deb450c4SShijith Thotton struct rte_event_dev_info info; 401deb450c4SShijith Thotton struct rte_event event = { 402deb450c4SShijith Thotton .op = RTE_EVENT_OP_NEW, 403deb450c4SShijith Thotton .event_type = RTE_EVENT_TYPE_CPU, 404deb450c4SShijith Thotton .sched_type = RTE_SCHED_TYPE_ATOMIC, 405deb450c4SShijith Thotton .u64 = 0xbadbadba, 406deb450c4SShijith Thotton }; 407deb450c4SShijith Thotton int i, ret; 408deb450c4SShijith Thotton 409deb450c4SShijith Thotton ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 410deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 411deb450c4SShijith Thotton 412deb450c4SShijith Thotton if (!(info.event_dev_cap & RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR)) 413deb450c4SShijith Thotton return TEST_SKIPPED; 414deb450c4SShijith Thotton 415deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(rte_event_dev_attr_get( 416deb450c4SShijith Thotton TEST_DEV_ID, RTE_EVENT_DEV_ATTR_QUEUE_COUNT, 417deb450c4SShijith Thotton &queue_count), 418deb450c4SShijith Thotton "Queue count get failed"); 419deb450c4SShijith Thotton 420deb450c4SShijith Thotton /* Need at least 2 queues to test LOW and HIGH priority. */ 421deb450c4SShijith Thotton TEST_ASSERT(queue_count > 1, "Not enough event queues, needed 2"); 422deb450c4SShijith Thotton queue_req = 2; 423deb450c4SShijith Thotton 424deb450c4SShijith Thotton for (i = 0; i < (int)queue_count; i++) { 425deb450c4SShijith Thotton ret = rte_event_queue_default_conf_get(TEST_DEV_ID, i, &qconf); 426deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to get queue%d def conf", i); 427deb450c4SShijith Thotton ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf); 428deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 429deb450c4SShijith Thotton } 430deb450c4SShijith Thotton 431deb450c4SShijith Thotton ret = rte_event_queue_attr_set(TEST_DEV_ID, 0, 432deb450c4SShijith Thotton RTE_EVENT_QUEUE_ATTR_PRIORITY, 433deb450c4SShijith Thotton RTE_EVENT_DEV_PRIORITY_LOWEST); 434deb450c4SShijith Thotton if (ret == -ENOTSUP) 435deb450c4SShijith Thotton return TEST_SKIPPED; 436deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Queue0 priority set failed"); 437deb450c4SShijith Thotton 438deb450c4SShijith Thotton ret = rte_event_queue_attr_set(TEST_DEV_ID, 1, 439deb450c4SShijith Thotton RTE_EVENT_QUEUE_ATTR_PRIORITY, 440deb450c4SShijith Thotton RTE_EVENT_DEV_PRIORITY_HIGHEST); 441deb450c4SShijith Thotton if (ret == -ENOTSUP) 442deb450c4SShijith Thotton return TEST_SKIPPED; 443deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Queue1 priority set failed"); 444deb450c4SShijith Thotton 445deb450c4SShijith Thotton /* Setup event port 0 */ 446deb450c4SShijith Thotton ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf); 447deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info"); 448deb450c4SShijith Thotton ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 449deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to setup port0"); 450deb450c4SShijith Thotton ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); 451deb450c4SShijith Thotton TEST_ASSERT(ret == (int)queue_count, "Failed to link port, device %d", 452deb450c4SShijith Thotton TEST_DEV_ID); 453deb450c4SShijith Thotton 454deb450c4SShijith Thotton ret = rte_event_dev_start(TEST_DEV_ID); 455deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to start device%d", TEST_DEV_ID); 456deb450c4SShijith Thotton 457deb450c4SShijith Thotton for (i = 0; i < (int)queue_req; i++) { 458deb450c4SShijith Thotton event.queue_id = i; 459deb450c4SShijith Thotton while (rte_event_enqueue_burst(TEST_DEV_ID, 0, &event, 1) != 1) 460deb450c4SShijith Thotton rte_pause(); 461deb450c4SShijith Thotton } 462deb450c4SShijith Thotton 463deb450c4SShijith Thotton prio = RTE_EVENT_DEV_PRIORITY_HIGHEST; 464deb450c4SShijith Thotton deq_cnt = 0; 465deb450c4SShijith Thotton while (deq_cnt < queue_req) { 466deb450c4SShijith Thotton uint32_t queue_prio; 467deb450c4SShijith Thotton 468deb450c4SShijith Thotton if (rte_event_dequeue_burst(TEST_DEV_ID, 0, &event, 1, 0) == 0) 469deb450c4SShijith Thotton continue; 470deb450c4SShijith Thotton 471deb450c4SShijith Thotton ret = rte_event_queue_attr_get(TEST_DEV_ID, event.queue_id, 472deb450c4SShijith Thotton RTE_EVENT_QUEUE_ATTR_PRIORITY, 473deb450c4SShijith Thotton &queue_prio); 474deb450c4SShijith Thotton if (ret == -ENOTSUP) 475deb450c4SShijith Thotton return TEST_SKIPPED; 476deb450c4SShijith Thotton 477deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Queue priority get failed"); 478deb450c4SShijith Thotton TEST_ASSERT(queue_prio >= prio, 479deb450c4SShijith Thotton "Received event from a lower priority queue first"); 480deb450c4SShijith Thotton prio = queue_prio; 481deb450c4SShijith Thotton deq_cnt++; 482deb450c4SShijith Thotton } 483deb450c4SShijith Thotton 484deb450c4SShijith Thotton return TEST_SUCCESS; 485deb450c4SShijith Thotton } 486deb450c4SShijith Thotton 487deb450c4SShijith Thotton static int 488deb450c4SShijith Thotton test_eventdev_queue_attr_weight_runtime(void) 489deb450c4SShijith Thotton { 490deb450c4SShijith Thotton struct rte_event_queue_conf qconf; 491deb450c4SShijith Thotton struct rte_event_dev_info info; 492deb450c4SShijith Thotton uint32_t queue_count; 493deb450c4SShijith Thotton int i, ret; 494deb450c4SShijith Thotton 495deb450c4SShijith Thotton ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 496deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 497deb450c4SShijith Thotton 498deb450c4SShijith Thotton if (!(info.event_dev_cap & RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR)) 499deb450c4SShijith Thotton return TEST_SKIPPED; 500deb450c4SShijith Thotton 501deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(rte_event_dev_attr_get( 502deb450c4SShijith Thotton TEST_DEV_ID, RTE_EVENT_DEV_ATTR_QUEUE_COUNT, 503deb450c4SShijith Thotton &queue_count), 504deb450c4SShijith Thotton "Queue count get failed"); 505deb450c4SShijith Thotton 506deb450c4SShijith Thotton for (i = 0; i < (int)queue_count; i++) { 507deb450c4SShijith Thotton ret = rte_event_queue_default_conf_get(TEST_DEV_ID, i, &qconf); 508deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to get queue%d def conf", i); 509deb450c4SShijith Thotton ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf); 510deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 511deb450c4SShijith Thotton } 512deb450c4SShijith Thotton 513deb450c4SShijith Thotton for (i = 0; i < (int)queue_count; i++) { 514deb450c4SShijith Thotton uint32_t get_val; 515deb450c4SShijith Thotton uint64_t set_val; 516deb450c4SShijith Thotton 517deb450c4SShijith Thotton set_val = i % RTE_EVENT_QUEUE_WEIGHT_HIGHEST; 518deb450c4SShijith Thotton ret = rte_event_queue_attr_set( 519deb450c4SShijith Thotton TEST_DEV_ID, i, RTE_EVENT_QUEUE_ATTR_WEIGHT, set_val); 520deb450c4SShijith Thotton if (ret == -ENOTSUP) 521deb450c4SShijith Thotton return TEST_SKIPPED; 522deb450c4SShijith Thotton 523deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Queue weight set failed"); 524deb450c4SShijith Thotton 525deb450c4SShijith Thotton ret = rte_event_queue_attr_get( 526deb450c4SShijith Thotton TEST_DEV_ID, i, RTE_EVENT_QUEUE_ATTR_WEIGHT, &get_val); 527deb450c4SShijith Thotton if (ret == -ENOTSUP) 528deb450c4SShijith Thotton return TEST_SKIPPED; 529deb450c4SShijith Thotton 530deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Queue weight get failed"); 531deb450c4SShijith Thotton TEST_ASSERT_EQUAL(get_val, set_val, 532deb450c4SShijith Thotton "Wrong weight value for queue%d", i); 533deb450c4SShijith Thotton } 534deb450c4SShijith Thotton 535deb450c4SShijith Thotton return TEST_SUCCESS; 536deb450c4SShijith Thotton } 537deb450c4SShijith Thotton 538deb450c4SShijith Thotton static int 539deb450c4SShijith Thotton test_eventdev_queue_attr_affinity_runtime(void) 540deb450c4SShijith Thotton { 541deb450c4SShijith Thotton struct rte_event_queue_conf qconf; 542deb450c4SShijith Thotton struct rte_event_dev_info info; 543deb450c4SShijith Thotton uint32_t queue_count; 544deb450c4SShijith Thotton int i, ret; 545deb450c4SShijith Thotton 546deb450c4SShijith Thotton ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 547deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 548deb450c4SShijith Thotton 549deb450c4SShijith Thotton if (!(info.event_dev_cap & RTE_EVENT_DEV_CAP_RUNTIME_QUEUE_ATTR)) 550deb450c4SShijith Thotton return TEST_SKIPPED; 551deb450c4SShijith Thotton 552deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(rte_event_dev_attr_get( 553deb450c4SShijith Thotton TEST_DEV_ID, RTE_EVENT_DEV_ATTR_QUEUE_COUNT, 554deb450c4SShijith Thotton &queue_count), 555deb450c4SShijith Thotton "Queue count get failed"); 556deb450c4SShijith Thotton 557deb450c4SShijith Thotton for (i = 0; i < (int)queue_count; i++) { 558deb450c4SShijith Thotton ret = rte_event_queue_default_conf_get(TEST_DEV_ID, i, &qconf); 559deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to get queue%d def conf", i); 560deb450c4SShijith Thotton ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf); 561deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 562deb450c4SShijith Thotton } 563deb450c4SShijith Thotton 564deb450c4SShijith Thotton for (i = 0; i < (int)queue_count; i++) { 565deb450c4SShijith Thotton uint32_t get_val; 566deb450c4SShijith Thotton uint64_t set_val; 567deb450c4SShijith Thotton 568deb450c4SShijith Thotton set_val = i % RTE_EVENT_QUEUE_AFFINITY_HIGHEST; 569deb450c4SShijith Thotton ret = rte_event_queue_attr_set( 570deb450c4SShijith Thotton TEST_DEV_ID, i, RTE_EVENT_QUEUE_ATTR_AFFINITY, set_val); 571deb450c4SShijith Thotton if (ret == -ENOTSUP) 572deb450c4SShijith Thotton return TEST_SKIPPED; 573deb450c4SShijith Thotton 574deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Queue affinity set failed"); 575deb450c4SShijith Thotton 576deb450c4SShijith Thotton ret = rte_event_queue_attr_get( 577deb450c4SShijith Thotton TEST_DEV_ID, i, RTE_EVENT_QUEUE_ATTR_AFFINITY, &get_val); 578deb450c4SShijith Thotton if (ret == -ENOTSUP) 579deb450c4SShijith Thotton return TEST_SKIPPED; 580deb450c4SShijith Thotton 581deb450c4SShijith Thotton TEST_ASSERT_SUCCESS(ret, "Queue affinity get failed"); 582deb450c4SShijith Thotton TEST_ASSERT_EQUAL(get_val, set_val, 583deb450c4SShijith Thotton "Wrong affinity value for queue%d", i); 584deb450c4SShijith Thotton } 585deb450c4SShijith Thotton 586deb450c4SShijith Thotton return TEST_SUCCESS; 587deb450c4SShijith Thotton } 588deb450c4SShijith Thotton 589deb450c4SShijith Thotton static int 590a9de470cSBruce Richardson test_eventdev_queue_attr_nb_atomic_flows(void) 591a9de470cSBruce Richardson { 592a9de470cSBruce Richardson int i, ret; 593a9de470cSBruce Richardson struct rte_event_dev_info info; 594a9de470cSBruce Richardson struct rte_event_queue_conf qconf; 595a9de470cSBruce Richardson uint32_t nb_atomic_flows; 596a9de470cSBruce Richardson 597a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 598a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 599a9de470cSBruce Richardson 600a9de470cSBruce Richardson uint32_t queue_count; 601a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 602a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 603a9de470cSBruce Richardson "Queue count get failed"); 604a9de470cSBruce Richardson 605a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf); 606a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get queue 0's def conf"); 607a9de470cSBruce Richardson 608a9de470cSBruce Richardson if (qconf.nb_atomic_flows == 0) 609a9de470cSBruce Richardson /* Assume PMD doesn't support atomic flows, return early */ 610a9de470cSBruce Richardson return -ENOTSUP; 611a9de470cSBruce Richardson 612a9de470cSBruce Richardson qconf.schedule_type = RTE_SCHED_TYPE_ATOMIC; 613a9de470cSBruce Richardson 614a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 615a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf); 616a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 617a9de470cSBruce Richardson } 618a9de470cSBruce Richardson 619a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 620a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i, 621a9de470cSBruce Richardson RTE_EVENT_QUEUE_ATTR_NB_ATOMIC_FLOWS, 622a9de470cSBruce Richardson &nb_atomic_flows), 623a9de470cSBruce Richardson "Queue nb_atomic_flows get failed"); 624a9de470cSBruce Richardson 625a9de470cSBruce Richardson TEST_ASSERT_EQUAL(nb_atomic_flows, qconf.nb_atomic_flows, 626a9de470cSBruce Richardson "Wrong atomic flows value for queue%d", i); 627a9de470cSBruce Richardson } 628a9de470cSBruce Richardson 629a9de470cSBruce Richardson return TEST_SUCCESS; 630a9de470cSBruce Richardson } 631a9de470cSBruce Richardson 632a9de470cSBruce Richardson static int 633a9de470cSBruce Richardson test_eventdev_queue_attr_nb_atomic_order_sequences(void) 634a9de470cSBruce Richardson { 635a9de470cSBruce Richardson int i, ret; 636a9de470cSBruce Richardson struct rte_event_dev_info info; 637a9de470cSBruce Richardson struct rte_event_queue_conf qconf; 638a9de470cSBruce Richardson uint32_t nb_atomic_order_sequences; 639a9de470cSBruce Richardson 640a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 641a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 642a9de470cSBruce Richardson 643a9de470cSBruce Richardson uint32_t queue_count; 644a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 645a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 646a9de470cSBruce Richardson "Queue count get failed"); 647a9de470cSBruce Richardson 648a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf); 649a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get queue 0's def conf"); 650a9de470cSBruce Richardson 651a9de470cSBruce Richardson if (qconf.nb_atomic_order_sequences == 0) 652a9de470cSBruce Richardson /* Assume PMD doesn't support reordering */ 653a9de470cSBruce Richardson return -ENOTSUP; 654a9de470cSBruce Richardson 655a9de470cSBruce Richardson qconf.schedule_type = RTE_SCHED_TYPE_ORDERED; 656a9de470cSBruce Richardson 657a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 658a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf); 659a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 660a9de470cSBruce Richardson } 661a9de470cSBruce Richardson 662a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 663a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i, 664a9de470cSBruce Richardson RTE_EVENT_QUEUE_ATTR_NB_ATOMIC_ORDER_SEQUENCES, 665a9de470cSBruce Richardson &nb_atomic_order_sequences), 666a9de470cSBruce Richardson "Queue nb_atomic_order_sequencess get failed"); 667a9de470cSBruce Richardson 668a9de470cSBruce Richardson TEST_ASSERT_EQUAL(nb_atomic_order_sequences, 669a9de470cSBruce Richardson qconf.nb_atomic_order_sequences, 670a9de470cSBruce Richardson "Wrong atomic order sequences value for queue%d", 671a9de470cSBruce Richardson i); 672a9de470cSBruce Richardson } 673a9de470cSBruce Richardson 674a9de470cSBruce Richardson return TEST_SUCCESS; 675a9de470cSBruce Richardson } 676a9de470cSBruce Richardson 677a9de470cSBruce Richardson static int 678a9de470cSBruce Richardson test_eventdev_queue_attr_event_queue_cfg(void) 679a9de470cSBruce Richardson { 680a9de470cSBruce Richardson int i, ret; 681a9de470cSBruce Richardson struct rte_event_dev_info info; 682a9de470cSBruce Richardson struct rte_event_queue_conf qconf; 683a9de470cSBruce Richardson uint32_t event_queue_cfg; 684a9de470cSBruce Richardson 685a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 686a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 687a9de470cSBruce Richardson 688a9de470cSBruce Richardson uint32_t queue_count; 689a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 690a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 691a9de470cSBruce Richardson "Queue count get failed"); 692a9de470cSBruce Richardson 693a9de470cSBruce Richardson ret = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qconf); 694a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get queue0 def conf"); 695a9de470cSBruce Richardson 696a9de470cSBruce Richardson qconf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK; 697a9de470cSBruce Richardson 698a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 699a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, i, &qconf); 700a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 701a9de470cSBruce Richardson } 702a9de470cSBruce Richardson 703a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 704a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_queue_attr_get(TEST_DEV_ID, i, 705a9de470cSBruce Richardson RTE_EVENT_QUEUE_ATTR_EVENT_QUEUE_CFG, 706a9de470cSBruce Richardson &event_queue_cfg), 707a9de470cSBruce Richardson "Queue event_queue_cfg get failed"); 708a9de470cSBruce Richardson 709a9de470cSBruce Richardson TEST_ASSERT_EQUAL(event_queue_cfg, qconf.event_queue_cfg, 710a9de470cSBruce Richardson "Wrong event_queue_cfg value for queue%d", 711a9de470cSBruce Richardson i); 712a9de470cSBruce Richardson } 713a9de470cSBruce Richardson 714a9de470cSBruce Richardson return TEST_SUCCESS; 715a9de470cSBruce Richardson } 716a9de470cSBruce Richardson 717a9de470cSBruce Richardson static int 718a9de470cSBruce Richardson test_eventdev_port_default_conf_get(void) 719a9de470cSBruce Richardson { 720a9de470cSBruce Richardson int i, ret; 721a9de470cSBruce Richardson struct rte_event_port_conf pconf; 722a9de470cSBruce Richardson 723a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, NULL); 724a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 725a9de470cSBruce Richardson 726a9de470cSBruce Richardson uint32_t port_count; 727a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 728a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_PORT_COUNT, 729a9de470cSBruce Richardson &port_count), "Port count get failed"); 730a9de470cSBruce Richardson 731a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, 732a9de470cSBruce Richardson port_count + 1, NULL); 733a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 734a9de470cSBruce Richardson 735a9de470cSBruce Richardson for (i = 0; i < (int)port_count; i++) { 736a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, i, 737a9de470cSBruce Richardson &pconf); 738a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get port%d info", i); 739a9de470cSBruce Richardson } 740a9de470cSBruce Richardson 741a9de470cSBruce Richardson return TEST_SUCCESS; 742a9de470cSBruce Richardson } 743a9de470cSBruce Richardson 744a9de470cSBruce Richardson static int 745a9de470cSBruce Richardson test_eventdev_port_setup(void) 746a9de470cSBruce Richardson { 747a9de470cSBruce Richardson int i, ret; 748a9de470cSBruce Richardson struct rte_event_dev_info info; 749a9de470cSBruce Richardson struct rte_event_port_conf pconf; 750a9de470cSBruce Richardson 751a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 752a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 753a9de470cSBruce Richardson 754a9de470cSBruce Richardson /* Negative cases */ 755a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf); 756a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info"); 757a9de470cSBruce Richardson pconf.new_event_threshold = info.max_num_events + 1; 758a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 759a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 760a9de470cSBruce Richardson 761a9de470cSBruce Richardson pconf.new_event_threshold = info.max_num_events; 762a9de470cSBruce Richardson pconf.dequeue_depth = info.max_event_port_dequeue_depth + 1; 763a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 764a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 765a9de470cSBruce Richardson 766a9de470cSBruce Richardson pconf.dequeue_depth = info.max_event_port_dequeue_depth; 767a9de470cSBruce Richardson pconf.enqueue_depth = info.max_event_port_enqueue_depth + 1; 768a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 769a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 770a9de470cSBruce Richardson 771a9de470cSBruce Richardson if (!(info.event_dev_cap & 772a9de470cSBruce Richardson RTE_EVENT_DEV_CAP_IMPLICIT_RELEASE_DISABLE)) { 773a9de470cSBruce Richardson pconf.enqueue_depth = info.max_event_port_enqueue_depth; 77475d11313STimothy McDaniel pconf.event_port_cfg = RTE_EVENT_PORT_CFG_DISABLE_IMPL_REL; 775a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 776a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 77775d11313STimothy McDaniel pconf.event_port_cfg = 0; 778a9de470cSBruce Richardson } 779a9de470cSBruce Richardson 780a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, info.max_event_ports, 781a9de470cSBruce Richardson &pconf); 782a9de470cSBruce Richardson TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); 783a9de470cSBruce Richardson 784a9de470cSBruce Richardson /* Positive case */ 785a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf); 786a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info"); 787a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 788a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port0"); 789a9de470cSBruce Richardson 790a9de470cSBruce Richardson uint32_t port_count; 791a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 792a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_PORT_COUNT, 793a9de470cSBruce Richardson &port_count), "Port count get failed"); 794a9de470cSBruce Richardson 7955c52220aSBruce Richardson for (i = 1; i < (int)port_count; i++) { 796a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, i, NULL); 797a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port%d", i); 798a9de470cSBruce Richardson } 799a9de470cSBruce Richardson 800a9de470cSBruce Richardson return TEST_SUCCESS; 801a9de470cSBruce Richardson } 802a9de470cSBruce Richardson 803a9de470cSBruce Richardson static int 804a9de470cSBruce Richardson test_eventdev_port_attr_dequeue_depth(void) 805a9de470cSBruce Richardson { 806a9de470cSBruce Richardson int ret; 807a9de470cSBruce Richardson struct rte_event_dev_info info; 808a9de470cSBruce Richardson struct rte_event_port_conf pconf; 809a9de470cSBruce Richardson 810a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 811a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 812a9de470cSBruce Richardson 813a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf); 814a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info"); 815a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 816a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port0"); 817a9de470cSBruce Richardson 818a9de470cSBruce Richardson uint32_t value; 819a9de470cSBruce Richardson TEST_ASSERT_EQUAL(rte_event_port_attr_get(TEST_DEV_ID, 0, 820a9de470cSBruce Richardson RTE_EVENT_PORT_ATTR_DEQ_DEPTH, &value), 821a9de470cSBruce Richardson 0, "Call to get port dequeue depth failed"); 822a9de470cSBruce Richardson TEST_ASSERT_EQUAL(value, pconf.dequeue_depth, 823a9de470cSBruce Richardson "Wrong port dequeue depth"); 824a9de470cSBruce Richardson 825a9de470cSBruce Richardson return TEST_SUCCESS; 826a9de470cSBruce Richardson } 827a9de470cSBruce Richardson 828a9de470cSBruce Richardson static int 829a9de470cSBruce Richardson test_eventdev_port_attr_enqueue_depth(void) 830a9de470cSBruce Richardson { 831a9de470cSBruce Richardson int ret; 832a9de470cSBruce Richardson struct rte_event_dev_info info; 833a9de470cSBruce Richardson struct rte_event_port_conf pconf; 834a9de470cSBruce Richardson 835a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 836a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 837a9de470cSBruce Richardson 838a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf); 839a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info"); 840a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 841a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port0"); 842a9de470cSBruce Richardson 843a9de470cSBruce Richardson uint32_t value; 844a9de470cSBruce Richardson TEST_ASSERT_EQUAL(rte_event_port_attr_get(TEST_DEV_ID, 0, 845a9de470cSBruce Richardson RTE_EVENT_PORT_ATTR_ENQ_DEPTH, &value), 846a9de470cSBruce Richardson 0, "Call to get port enqueue depth failed"); 847a9de470cSBruce Richardson TEST_ASSERT_EQUAL(value, pconf.enqueue_depth, 848a9de470cSBruce Richardson "Wrong port enqueue depth"); 849a9de470cSBruce Richardson 850a9de470cSBruce Richardson return TEST_SUCCESS; 851a9de470cSBruce Richardson } 852a9de470cSBruce Richardson 853a9de470cSBruce Richardson static int 854a9de470cSBruce Richardson test_eventdev_port_attr_new_event_threshold(void) 855a9de470cSBruce Richardson { 856a9de470cSBruce Richardson int ret; 857a9de470cSBruce Richardson struct rte_event_dev_info info; 858a9de470cSBruce Richardson struct rte_event_port_conf pconf; 859a9de470cSBruce Richardson 860a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 861a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 862a9de470cSBruce Richardson 863a9de470cSBruce Richardson ret = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pconf); 864a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get port0 info"); 865a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, 0, &pconf); 866a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port0"); 867a9de470cSBruce Richardson 868a9de470cSBruce Richardson uint32_t value; 869a9de470cSBruce Richardson TEST_ASSERT_EQUAL(rte_event_port_attr_get(TEST_DEV_ID, 0, 870a9de470cSBruce Richardson RTE_EVENT_PORT_ATTR_NEW_EVENT_THRESHOLD, &value), 871a9de470cSBruce Richardson 0, "Call to get port new event threshold failed"); 872a9de470cSBruce Richardson TEST_ASSERT_EQUAL((int32_t) value, pconf.new_event_threshold, 873a9de470cSBruce Richardson "Wrong port new event threshold"); 874a9de470cSBruce Richardson 875a9de470cSBruce Richardson return TEST_SUCCESS; 876a9de470cSBruce Richardson } 877a9de470cSBruce Richardson 878a9de470cSBruce Richardson static int 879a9de470cSBruce Richardson test_eventdev_port_count(void) 880a9de470cSBruce Richardson { 881a9de470cSBruce Richardson int ret; 882a9de470cSBruce Richardson struct rte_event_dev_info info; 883a9de470cSBruce Richardson 884a9de470cSBruce Richardson ret = rte_event_dev_info_get(TEST_DEV_ID, &info); 885a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info"); 886a9de470cSBruce Richardson 887a9de470cSBruce Richardson uint32_t port_count; 888a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 889a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_PORT_COUNT, 890a9de470cSBruce Richardson &port_count), "Port count get failed"); 891a9de470cSBruce Richardson TEST_ASSERT_EQUAL(port_count, info.max_event_ports, "Wrong port count"); 892a9de470cSBruce Richardson 893a9de470cSBruce Richardson return TEST_SUCCESS; 894a9de470cSBruce Richardson } 895a9de470cSBruce Richardson 896a9de470cSBruce Richardson static int 897a9de470cSBruce Richardson test_eventdev_timeout_ticks(void) 898a9de470cSBruce Richardson { 899a9de470cSBruce Richardson int ret; 900a9de470cSBruce Richardson uint64_t timeout_ticks; 901a9de470cSBruce Richardson 902a9de470cSBruce Richardson ret = rte_event_dequeue_timeout_ticks(TEST_DEV_ID, 100, &timeout_ticks); 903a9de470cSBruce Richardson if (ret != -ENOTSUP) 904a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Fail to get timeout_ticks"); 905a9de470cSBruce Richardson 906a9de470cSBruce Richardson return ret; 907a9de470cSBruce Richardson } 908a9de470cSBruce Richardson 909a9de470cSBruce Richardson 910a9de470cSBruce Richardson static int 911a9de470cSBruce Richardson test_eventdev_start_stop(void) 912a9de470cSBruce Richardson { 913a9de470cSBruce Richardson int i, ret; 914a9de470cSBruce Richardson 915a9de470cSBruce Richardson ret = eventdev_configure_setup(); 916a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev"); 917a9de470cSBruce Richardson 918a9de470cSBruce Richardson uint32_t queue_count; 919a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 920a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 921a9de470cSBruce Richardson "Queue count get failed"); 922a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 923a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, i, NULL); 924a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 925a9de470cSBruce Richardson } 926a9de470cSBruce Richardson 927a9de470cSBruce Richardson uint32_t port_count; 928a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 929a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_PORT_COUNT, 930a9de470cSBruce Richardson &port_count), "Port count get failed"); 931a9de470cSBruce Richardson 932a9de470cSBruce Richardson for (i = 0; i < (int)port_count; i++) { 933a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, i, NULL); 934a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port%d", i); 935a9de470cSBruce Richardson } 936a9de470cSBruce Richardson 937a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); 938a9de470cSBruce Richardson TEST_ASSERT(ret == (int)queue_count, "Failed to link port, device %d", 939a9de470cSBruce Richardson TEST_DEV_ID); 940a9de470cSBruce Richardson 941a9de470cSBruce Richardson ret = rte_event_dev_start(TEST_DEV_ID); 942a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to start device%d", TEST_DEV_ID); 943a9de470cSBruce Richardson 944a9de470cSBruce Richardson rte_event_dev_stop(TEST_DEV_ID); 945a9de470cSBruce Richardson return TEST_SUCCESS; 946a9de470cSBruce Richardson } 947a9de470cSBruce Richardson 948a9de470cSBruce Richardson 949a9de470cSBruce Richardson static int 950a9de470cSBruce Richardson eventdev_setup_device(void) 951a9de470cSBruce Richardson { 952a9de470cSBruce Richardson int i, ret; 953a9de470cSBruce Richardson 954a9de470cSBruce Richardson ret = eventdev_configure_setup(); 955a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev"); 956a9de470cSBruce Richardson 957a9de470cSBruce Richardson uint32_t queue_count; 958a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 959a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 960a9de470cSBruce Richardson "Queue count get failed"); 961a9de470cSBruce Richardson for (i = 0; i < (int)queue_count; i++) { 962a9de470cSBruce Richardson ret = rte_event_queue_setup(TEST_DEV_ID, i, NULL); 963a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue%d", i); 964a9de470cSBruce Richardson } 965a9de470cSBruce Richardson 966a9de470cSBruce Richardson uint32_t port_count; 967a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 968a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_PORT_COUNT, 969a9de470cSBruce Richardson &port_count), "Port count get failed"); 970a9de470cSBruce Richardson 971a9de470cSBruce Richardson for (i = 0; i < (int)port_count; i++) { 972a9de470cSBruce Richardson ret = rte_event_port_setup(TEST_DEV_ID, i, NULL); 973a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port%d", i); 974a9de470cSBruce Richardson } 975a9de470cSBruce Richardson 976a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); 977a9de470cSBruce Richardson TEST_ASSERT(ret == (int)queue_count, "Failed to link port, device %d", 978a9de470cSBruce Richardson TEST_DEV_ID); 979a9de470cSBruce Richardson 980a9de470cSBruce Richardson ret = rte_event_dev_start(TEST_DEV_ID); 981a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to start device%d", TEST_DEV_ID); 982a9de470cSBruce Richardson 983a9de470cSBruce Richardson return TEST_SUCCESS; 984a9de470cSBruce Richardson } 985a9de470cSBruce Richardson 986a9de470cSBruce Richardson static void 987a9de470cSBruce Richardson eventdev_stop_device(void) 988a9de470cSBruce Richardson { 989a9de470cSBruce Richardson rte_event_dev_stop(TEST_DEV_ID); 990a9de470cSBruce Richardson } 991a9de470cSBruce Richardson 992a9de470cSBruce Richardson static int 993a9de470cSBruce Richardson test_eventdev_link(void) 994a9de470cSBruce Richardson { 995a9de470cSBruce Richardson int ret, nb_queues, i; 996a9de470cSBruce Richardson uint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV]; 997a9de470cSBruce Richardson uint8_t priorities[RTE_EVENT_MAX_QUEUES_PER_DEV]; 998a9de470cSBruce Richardson 999a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); 1000a9de470cSBruce Richardson TEST_ASSERT(ret >= 0, "Failed to link with NULL device%d", 1001a9de470cSBruce Richardson TEST_DEV_ID); 1002a9de470cSBruce Richardson 1003a9de470cSBruce Richardson uint32_t queue_count; 1004a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 1005a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 1006a9de470cSBruce Richardson "Queue count get failed"); 1007a9de470cSBruce Richardson nb_queues = queue_count; 1008a9de470cSBruce Richardson for (i = 0; i < nb_queues; i++) { 1009a9de470cSBruce Richardson queues[i] = i; 1010a9de470cSBruce Richardson priorities[i] = RTE_EVENT_DEV_PRIORITY_NORMAL; 1011a9de470cSBruce Richardson } 1012a9de470cSBruce Richardson 1013a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, queues, 1014a9de470cSBruce Richardson priorities, nb_queues); 1015a9de470cSBruce Richardson TEST_ASSERT(ret == nb_queues, "Failed to link(device%d) ret=%d", 1016a9de470cSBruce Richardson TEST_DEV_ID, ret); 1017a9de470cSBruce Richardson return TEST_SUCCESS; 1018a9de470cSBruce Richardson } 1019a9de470cSBruce Richardson 1020a9de470cSBruce Richardson static int 1021a9de470cSBruce Richardson test_eventdev_unlink(void) 1022a9de470cSBruce Richardson { 1023a9de470cSBruce Richardson int ret, nb_queues, i; 1024a9de470cSBruce Richardson uint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV]; 1025a9de470cSBruce Richardson 1026a9de470cSBruce Richardson ret = rte_event_port_unlink(TEST_DEV_ID, 0, NULL, 0); 1027a9de470cSBruce Richardson TEST_ASSERT(ret >= 0, "Failed to unlink with NULL device%d", 1028a9de470cSBruce Richardson TEST_DEV_ID); 1029a9de470cSBruce Richardson 1030a9de470cSBruce Richardson uint32_t queue_count; 1031a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 1032a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 1033a9de470cSBruce Richardson "Queue count get failed"); 1034a9de470cSBruce Richardson nb_queues = queue_count; 1035a9de470cSBruce Richardson for (i = 0; i < nb_queues; i++) 1036a9de470cSBruce Richardson queues[i] = i; 1037a9de470cSBruce Richardson 1038a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); 1039a9de470cSBruce Richardson TEST_ASSERT(ret >= 0, "Failed to link with NULL device%d", 1040a9de470cSBruce Richardson TEST_DEV_ID); 1041a9de470cSBruce Richardson 1042a9de470cSBruce Richardson ret = rte_event_port_unlink(TEST_DEV_ID, 0, queues, nb_queues); 1043a9de470cSBruce Richardson TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d", 1044a9de470cSBruce Richardson TEST_DEV_ID, ret); 1045a9de470cSBruce Richardson return TEST_SUCCESS; 1046a9de470cSBruce Richardson } 1047a9de470cSBruce Richardson 1048a9de470cSBruce Richardson static int 1049a9de470cSBruce Richardson test_eventdev_link_get(void) 1050a9de470cSBruce Richardson { 1051a9de470cSBruce Richardson int ret, i; 1052a9de470cSBruce Richardson uint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV]; 1053a9de470cSBruce Richardson uint8_t priorities[RTE_EVENT_MAX_QUEUES_PER_DEV]; 1054a9de470cSBruce Richardson 1055a9de470cSBruce Richardson /* link all queues */ 1056a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); 1057a9de470cSBruce Richardson TEST_ASSERT(ret >= 0, "Failed to link with NULL device%d", 1058a9de470cSBruce Richardson TEST_DEV_ID); 1059a9de470cSBruce Richardson 1060a9de470cSBruce Richardson uint32_t queue_count; 1061a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_attr_get(TEST_DEV_ID, 1062a9de470cSBruce Richardson RTE_EVENT_DEV_ATTR_QUEUE_COUNT, &queue_count), 1063a9de470cSBruce Richardson "Queue count get failed"); 1064a9de470cSBruce Richardson const int nb_queues = queue_count; 1065a9de470cSBruce Richardson for (i = 0; i < nb_queues; i++) 1066a9de470cSBruce Richardson queues[i] = i; 1067a9de470cSBruce Richardson 1068a9de470cSBruce Richardson ret = rte_event_port_unlink(TEST_DEV_ID, 0, queues, nb_queues); 1069a9de470cSBruce Richardson TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d", 1070a9de470cSBruce Richardson TEST_DEV_ID, ret); 1071a9de470cSBruce Richardson 1072a9de470cSBruce Richardson ret = rte_event_port_links_get(TEST_DEV_ID, 0, queues, priorities); 1073a9de470cSBruce Richardson TEST_ASSERT(ret == 0, "(%d)Wrong link get=%d", TEST_DEV_ID, ret); 1074a9de470cSBruce Richardson 1075a9de470cSBruce Richardson /* link all queues and get the links */ 1076a9de470cSBruce Richardson for (i = 0; i < nb_queues; i++) { 1077a9de470cSBruce Richardson queues[i] = i; 1078a9de470cSBruce Richardson priorities[i] = RTE_EVENT_DEV_PRIORITY_NORMAL; 1079a9de470cSBruce Richardson } 1080a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, queues, priorities, 1081a9de470cSBruce Richardson nb_queues); 1082a9de470cSBruce Richardson TEST_ASSERT(ret == nb_queues, "Failed to link(device%d) ret=%d", 1083a9de470cSBruce Richardson TEST_DEV_ID, ret); 1084a9de470cSBruce Richardson ret = rte_event_port_links_get(TEST_DEV_ID, 0, queues, priorities); 1085a9de470cSBruce Richardson TEST_ASSERT(ret == nb_queues, "(%d)Wrong link get ret=%d expected=%d", 1086a9de470cSBruce Richardson TEST_DEV_ID, ret, nb_queues); 1087a9de470cSBruce Richardson /* unlink all*/ 1088a9de470cSBruce Richardson ret = rte_event_port_unlink(TEST_DEV_ID, 0, NULL, 0); 1089a9de470cSBruce Richardson TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d", 1090a9de470cSBruce Richardson TEST_DEV_ID, ret); 1091a9de470cSBruce Richardson /* link just one queue */ 1092a9de470cSBruce Richardson queues[0] = 0; 1093a9de470cSBruce Richardson priorities[0] = RTE_EVENT_DEV_PRIORITY_NORMAL; 1094a9de470cSBruce Richardson 1095a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, queues, priorities, 1); 1096a9de470cSBruce Richardson TEST_ASSERT(ret == 1, "Failed to link(device%d) ret=%d", 1097a9de470cSBruce Richardson TEST_DEV_ID, ret); 1098a9de470cSBruce Richardson ret = rte_event_port_links_get(TEST_DEV_ID, 0, queues, priorities); 1099a9de470cSBruce Richardson TEST_ASSERT(ret == 1, "(%d)Wrong link get ret=%d expected=%d", 1100a9de470cSBruce Richardson TEST_DEV_ID, ret, 1); 1101a9de470cSBruce Richardson /* unlink the queue */ 1102a9de470cSBruce Richardson ret = rte_event_port_unlink(TEST_DEV_ID, 0, NULL, 0); 1103a9de470cSBruce Richardson TEST_ASSERT(ret == 1, "Failed to unlink(device%d) ret=%d", 1104a9de470cSBruce Richardson TEST_DEV_ID, ret); 1105a9de470cSBruce Richardson 1106a9de470cSBruce Richardson /* 4links and 2 unlinks */ 1107a9de470cSBruce Richardson if (nb_queues >= 4) { 1108a9de470cSBruce Richardson for (i = 0; i < 4; i++) { 1109a9de470cSBruce Richardson queues[i] = i; 1110a9de470cSBruce Richardson priorities[i] = 0x40; 1111a9de470cSBruce Richardson } 1112a9de470cSBruce Richardson ret = rte_event_port_link(TEST_DEV_ID, 0, queues, priorities, 1113a9de470cSBruce Richardson 4); 1114a9de470cSBruce Richardson TEST_ASSERT(ret == 4, "Failed to link(device%d) ret=%d", 1115a9de470cSBruce Richardson TEST_DEV_ID, ret); 1116a9de470cSBruce Richardson 1117a9de470cSBruce Richardson for (i = 0; i < 2; i++) 1118a9de470cSBruce Richardson queues[i] = i; 1119a9de470cSBruce Richardson 1120a9de470cSBruce Richardson ret = rte_event_port_unlink(TEST_DEV_ID, 0, queues, 2); 1121a9de470cSBruce Richardson TEST_ASSERT(ret == 2, "Failed to unlink(device%d) ret=%d", 1122a9de470cSBruce Richardson TEST_DEV_ID, ret); 1123a9de470cSBruce Richardson ret = rte_event_port_links_get(TEST_DEV_ID, 0, 1124a9de470cSBruce Richardson queues, priorities); 1125a9de470cSBruce Richardson TEST_ASSERT(ret == 2, "(%d)Wrong link get ret=%d expected=%d", 1126a9de470cSBruce Richardson TEST_DEV_ID, ret, 2); 1127a9de470cSBruce Richardson TEST_ASSERT(queues[0] == 2, "ret=%d expected=%d", ret, 2); 1128a9de470cSBruce Richardson TEST_ASSERT(priorities[0] == 0x40, "ret=%d expected=%d", 1129a9de470cSBruce Richardson ret, 0x40); 1130a9de470cSBruce Richardson TEST_ASSERT(queues[1] == 3, "ret=%d expected=%d", ret, 3); 1131a9de470cSBruce Richardson TEST_ASSERT(priorities[1] == 0x40, "ret=%d expected=%d", 1132a9de470cSBruce Richardson ret, 0x40); 1133a9de470cSBruce Richardson } 1134a9de470cSBruce Richardson 1135a9de470cSBruce Richardson return TEST_SUCCESS; 1136a9de470cSBruce Richardson } 1137a9de470cSBruce Richardson 1138a9de470cSBruce Richardson static int 1139d007a7f3SPavan Nikhilesh test_eventdev_profile_switch(void) 1140d007a7f3SPavan Nikhilesh { 1141d007a7f3SPavan Nikhilesh #define MAX_RETRIES 4 1142d007a7f3SPavan Nikhilesh uint8_t priorities[RTE_EVENT_MAX_QUEUES_PER_DEV]; 1143d007a7f3SPavan Nikhilesh uint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV]; 1144d007a7f3SPavan Nikhilesh struct rte_event_queue_conf qcfg; 1145d007a7f3SPavan Nikhilesh struct rte_event_port_conf pcfg; 1146d007a7f3SPavan Nikhilesh struct rte_event_dev_info info; 1147d007a7f3SPavan Nikhilesh struct rte_event ev; 1148d007a7f3SPavan Nikhilesh uint8_t q, re; 1149d007a7f3SPavan Nikhilesh int rc; 1150d007a7f3SPavan Nikhilesh 1151d007a7f3SPavan Nikhilesh rte_event_dev_info_get(TEST_DEV_ID, &info); 1152d007a7f3SPavan Nikhilesh 1153d007a7f3SPavan Nikhilesh if (info.max_profiles_per_port <= 1) 1154d007a7f3SPavan Nikhilesh return TEST_SKIPPED; 1155d007a7f3SPavan Nikhilesh 1156d007a7f3SPavan Nikhilesh if (info.max_event_queues <= 1) 1157d007a7f3SPavan Nikhilesh return TEST_SKIPPED; 1158d007a7f3SPavan Nikhilesh 1159d007a7f3SPavan Nikhilesh rc = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pcfg); 1160d007a7f3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to get port0 default config"); 1161d007a7f3SPavan Nikhilesh rc = rte_event_port_setup(TEST_DEV_ID, 0, &pcfg); 1162d007a7f3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to setup port0"); 1163d007a7f3SPavan Nikhilesh 1164d007a7f3SPavan Nikhilesh rc = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qcfg); 1165d007a7f3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to get queue0 default config"); 1166d007a7f3SPavan Nikhilesh rc = rte_event_queue_setup(TEST_DEV_ID, 0, &qcfg); 1167d007a7f3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to setup queue0"); 1168d007a7f3SPavan Nikhilesh 1169d007a7f3SPavan Nikhilesh q = 0; 1170d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_links_set(TEST_DEV_ID, 0, &q, NULL, 1, 0); 1171d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to link queue 0 to port 0 with profile 0"); 1172d007a7f3SPavan Nikhilesh q = 1; 1173d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_links_set(TEST_DEV_ID, 0, &q, NULL, 1, 1); 1174d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to link queue 1 to port 0 with profile 1"); 1175d007a7f3SPavan Nikhilesh 1176d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_links_get(TEST_DEV_ID, 0, queues, priorities, 0); 1177d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to links"); 1178d007a7f3SPavan Nikhilesh TEST_ASSERT(queues[0] == 0, "Invalid queue found in link"); 1179d007a7f3SPavan Nikhilesh 1180d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_links_get(TEST_DEV_ID, 0, queues, priorities, 1); 1181d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to links"); 1182d007a7f3SPavan Nikhilesh TEST_ASSERT(queues[0] == 1, "Invalid queue found in link"); 1183d007a7f3SPavan Nikhilesh 1184d007a7f3SPavan Nikhilesh rc = rte_event_dev_start(TEST_DEV_ID); 1185d007a7f3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to start event device"); 1186d007a7f3SPavan Nikhilesh 1187d007a7f3SPavan Nikhilesh ev.event_type = RTE_EVENT_TYPE_CPU; 1188d007a7f3SPavan Nikhilesh ev.queue_id = 0; 1189d007a7f3SPavan Nikhilesh ev.op = RTE_EVENT_OP_NEW; 1190d007a7f3SPavan Nikhilesh ev.flow_id = 0; 1191d007a7f3SPavan Nikhilesh ev.u64 = 0xBADF00D0; 1192adadb558SPavan Nikhilesh ev.sched_type = RTE_SCHED_TYPE_PARALLEL; 1193d007a7f3SPavan Nikhilesh rc = rte_event_enqueue_burst(TEST_DEV_ID, 0, &ev, 1); 1194d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to enqueue event"); 1195d007a7f3SPavan Nikhilesh ev.queue_id = 1; 1196d007a7f3SPavan Nikhilesh ev.flow_id = 1; 1197d007a7f3SPavan Nikhilesh rc = rte_event_enqueue_burst(TEST_DEV_ID, 0, &ev, 1); 1198d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to enqueue event"); 1199d007a7f3SPavan Nikhilesh 1200d007a7f3SPavan Nikhilesh ev.event = 0; 1201d007a7f3SPavan Nikhilesh ev.u64 = 0; 1202d007a7f3SPavan Nikhilesh 1203d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_switch(TEST_DEV_ID, 0, 1); 1204d007a7f3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to change profile"); 1205d007a7f3SPavan Nikhilesh 1206d007a7f3SPavan Nikhilesh re = MAX_RETRIES; 1207d007a7f3SPavan Nikhilesh while (re--) { 1208d007a7f3SPavan Nikhilesh rc = rte_event_dequeue_burst(TEST_DEV_ID, 0, &ev, 1, 0); 1209d007a7f3SPavan Nikhilesh printf("rc %d\n", rc); 1210d007a7f3SPavan Nikhilesh if (rc) 1211d007a7f3SPavan Nikhilesh break; 1212d007a7f3SPavan Nikhilesh } 1213d007a7f3SPavan Nikhilesh 1214d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to dequeue event from profile 1"); 1215d007a7f3SPavan Nikhilesh TEST_ASSERT(ev.flow_id == 1, "Incorrect flow identifier from profile 1"); 1216d007a7f3SPavan Nikhilesh TEST_ASSERT(ev.queue_id == 1, "Incorrect queue identifier from profile 1"); 1217d007a7f3SPavan Nikhilesh 1218d007a7f3SPavan Nikhilesh re = MAX_RETRIES; 1219d007a7f3SPavan Nikhilesh while (re--) { 1220d007a7f3SPavan Nikhilesh rc = rte_event_dequeue_burst(TEST_DEV_ID, 0, &ev, 1, 0); 1221d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 0, "Unexpected event dequeued from active profile"); 1222d007a7f3SPavan Nikhilesh } 1223d007a7f3SPavan Nikhilesh 1224d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_switch(TEST_DEV_ID, 0, 0); 1225d007a7f3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to change profile"); 1226d007a7f3SPavan Nikhilesh 1227d007a7f3SPavan Nikhilesh re = MAX_RETRIES; 1228d007a7f3SPavan Nikhilesh while (re--) { 1229d007a7f3SPavan Nikhilesh rc = rte_event_dequeue_burst(TEST_DEV_ID, 0, &ev, 1, 0); 1230d007a7f3SPavan Nikhilesh if (rc) 1231d007a7f3SPavan Nikhilesh break; 1232d007a7f3SPavan Nikhilesh } 1233d007a7f3SPavan Nikhilesh 1234d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to dequeue event from profile 1"); 1235d007a7f3SPavan Nikhilesh TEST_ASSERT(ev.flow_id == 0, "Incorrect flow identifier from profile 0"); 1236d007a7f3SPavan Nikhilesh TEST_ASSERT(ev.queue_id == 0, "Incorrect queue identifier from profile 0"); 1237d007a7f3SPavan Nikhilesh 1238d007a7f3SPavan Nikhilesh re = MAX_RETRIES; 1239d007a7f3SPavan Nikhilesh while (re--) { 1240d007a7f3SPavan Nikhilesh rc = rte_event_dequeue_burst(TEST_DEV_ID, 0, &ev, 1, 0); 1241d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 0, "Unexpected event dequeued from active profile"); 1242d007a7f3SPavan Nikhilesh } 1243d007a7f3SPavan Nikhilesh 1244d007a7f3SPavan Nikhilesh q = 0; 1245d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_unlink(TEST_DEV_ID, 0, &q, 1, 0); 1246d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to unlink queue 0 to port 0 with profile 0"); 1247d007a7f3SPavan Nikhilesh q = 1; 1248d007a7f3SPavan Nikhilesh rc = rte_event_port_profile_unlink(TEST_DEV_ID, 0, &q, 1, 1); 1249d007a7f3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to unlink queue 1 to port 0 with profile 1"); 1250d007a7f3SPavan Nikhilesh 1251d007a7f3SPavan Nikhilesh return TEST_SUCCESS; 1252d007a7f3SPavan Nikhilesh } 1253d007a7f3SPavan Nikhilesh 1254d007a7f3SPavan Nikhilesh static int 1255c1bdd86dSPavan Nikhilesh preschedule_test(enum rte_event_dev_preschedule_type preschedule_type, const char *preschedule_name, 1256c1bdd86dSPavan Nikhilesh uint8_t modify) 1257acc65ee3SPavan Nikhilesh { 1258acc65ee3SPavan Nikhilesh #define NB_EVENTS 1024 1259acc65ee3SPavan Nikhilesh uint64_t start, total; 1260acc65ee3SPavan Nikhilesh struct rte_event ev; 1261acc65ee3SPavan Nikhilesh int rc, cnt; 1262acc65ee3SPavan Nikhilesh 1263acc65ee3SPavan Nikhilesh ev.event_type = RTE_EVENT_TYPE_CPU; 1264acc65ee3SPavan Nikhilesh ev.queue_id = 0; 1265acc65ee3SPavan Nikhilesh ev.op = RTE_EVENT_OP_NEW; 1266acc65ee3SPavan Nikhilesh ev.u64 = 0xBADF00D0; 1267acc65ee3SPavan Nikhilesh 1268acc65ee3SPavan Nikhilesh for (cnt = 0; cnt < NB_EVENTS; cnt++) { 1269acc65ee3SPavan Nikhilesh ev.flow_id = cnt; 1270acc65ee3SPavan Nikhilesh rc = rte_event_enqueue_burst(TEST_DEV_ID, 0, &ev, 1); 1271acc65ee3SPavan Nikhilesh TEST_ASSERT(rc == 1, "Failed to enqueue event"); 1272acc65ee3SPavan Nikhilesh } 1273acc65ee3SPavan Nikhilesh 1274c1bdd86dSPavan Nikhilesh if (modify) { 1275c1bdd86dSPavan Nikhilesh rc = rte_event_port_preschedule_modify(TEST_DEV_ID, 0, preschedule_type); 1276c1bdd86dSPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to modify preschedule type"); 1277c1bdd86dSPavan Nikhilesh } 1278c1bdd86dSPavan Nikhilesh 1279acc65ee3SPavan Nikhilesh total = 0; 1280acc65ee3SPavan Nikhilesh while (cnt) { 1281acc65ee3SPavan Nikhilesh start = rte_rdtsc_precise(); 1282acc65ee3SPavan Nikhilesh rc = rte_event_dequeue_burst(TEST_DEV_ID, 0, &ev, 1, 0); 1283acc65ee3SPavan Nikhilesh if (rc) { 1284acc65ee3SPavan Nikhilesh total += rte_rdtsc_precise() - start; 1285acc65ee3SPavan Nikhilesh cnt--; 1286acc65ee3SPavan Nikhilesh } 1287acc65ee3SPavan Nikhilesh } 1288acc65ee3SPavan Nikhilesh printf("Preschedule type : %s, avg cycles %" PRIu64 "\n", preschedule_name, 1289acc65ee3SPavan Nikhilesh total / NB_EVENTS); 1290acc65ee3SPavan Nikhilesh 1291acc65ee3SPavan Nikhilesh return TEST_SUCCESS; 1292acc65ee3SPavan Nikhilesh } 1293acc65ee3SPavan Nikhilesh 1294acc65ee3SPavan Nikhilesh static int 1295acc65ee3SPavan Nikhilesh preschedule_configure(enum rte_event_dev_preschedule_type type, struct rte_event_dev_info *info) 1296acc65ee3SPavan Nikhilesh { 1297acc65ee3SPavan Nikhilesh struct rte_event_dev_config dev_conf; 1298acc65ee3SPavan Nikhilesh struct rte_event_queue_conf qcfg; 1299acc65ee3SPavan Nikhilesh struct rte_event_port_conf pcfg; 1300acc65ee3SPavan Nikhilesh int rc; 1301acc65ee3SPavan Nikhilesh 1302acc65ee3SPavan Nikhilesh devconf_set_default_sane_values(&dev_conf, info); 1303acc65ee3SPavan Nikhilesh dev_conf.nb_event_ports = 1; 1304acc65ee3SPavan Nikhilesh dev_conf.nb_event_queues = 1; 1305acc65ee3SPavan Nikhilesh dev_conf.preschedule_type = type; 1306acc65ee3SPavan Nikhilesh 1307acc65ee3SPavan Nikhilesh rc = rte_event_dev_configure(TEST_DEV_ID, &dev_conf); 1308acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to configure eventdev"); 1309acc65ee3SPavan Nikhilesh 1310acc65ee3SPavan Nikhilesh rc = rte_event_port_default_conf_get(TEST_DEV_ID, 0, &pcfg); 1311acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to get port0 default config"); 1312acc65ee3SPavan Nikhilesh rc = rte_event_port_setup(TEST_DEV_ID, 0, &pcfg); 1313acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to setup port0"); 1314acc65ee3SPavan Nikhilesh 1315acc65ee3SPavan Nikhilesh rc = rte_event_queue_default_conf_get(TEST_DEV_ID, 0, &qcfg); 1316acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to get queue0 default config"); 1317acc65ee3SPavan Nikhilesh rc = rte_event_queue_setup(TEST_DEV_ID, 0, &qcfg); 1318acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to setup queue0"); 1319acc65ee3SPavan Nikhilesh 1320acc65ee3SPavan Nikhilesh rc = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); 1321acc65ee3SPavan Nikhilesh TEST_ASSERT(rc == (int)dev_conf.nb_event_queues, "Failed to link port, device %d", 1322acc65ee3SPavan Nikhilesh TEST_DEV_ID); 1323acc65ee3SPavan Nikhilesh 1324acc65ee3SPavan Nikhilesh rc = rte_event_dev_start(TEST_DEV_ID); 1325acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to start event device"); 1326acc65ee3SPavan Nikhilesh 1327acc65ee3SPavan Nikhilesh return 0; 1328acc65ee3SPavan Nikhilesh } 1329acc65ee3SPavan Nikhilesh 1330acc65ee3SPavan Nikhilesh static int 1331acc65ee3SPavan Nikhilesh test_eventdev_preschedule_configure(void) 1332acc65ee3SPavan Nikhilesh { 1333acc65ee3SPavan Nikhilesh struct rte_event_dev_info info; 1334acc65ee3SPavan Nikhilesh int rc; 1335acc65ee3SPavan Nikhilesh 1336acc65ee3SPavan Nikhilesh rte_event_dev_info_get(TEST_DEV_ID, &info); 1337acc65ee3SPavan Nikhilesh 1338acc65ee3SPavan Nikhilesh if ((info.event_dev_cap & RTE_EVENT_DEV_CAP_EVENT_PRESCHEDULE) == 0) 1339acc65ee3SPavan Nikhilesh return TEST_SKIPPED; 1340acc65ee3SPavan Nikhilesh 1341acc65ee3SPavan Nikhilesh rc = preschedule_configure(RTE_EVENT_PRESCHEDULE_NONE, &info); 1342acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to configure eventdev"); 1343c1bdd86dSPavan Nikhilesh rc = preschedule_test(RTE_EVENT_PRESCHEDULE_NONE, "RTE_EVENT_PRESCHEDULE_NONE", 0); 1344acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to test preschedule RTE_EVENT_PRESCHEDULE_NONE"); 1345acc65ee3SPavan Nikhilesh 1346acc65ee3SPavan Nikhilesh rte_event_dev_stop(TEST_DEV_ID); 1347acc65ee3SPavan Nikhilesh rc = preschedule_configure(RTE_EVENT_PRESCHEDULE, &info); 1348acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to configure eventdev"); 1349c1bdd86dSPavan Nikhilesh rc = preschedule_test(RTE_EVENT_PRESCHEDULE, "RTE_EVENT_PRESCHEDULE", 0); 1350acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to test preschedule RTE_EVENT_PRESCHEDULE"); 1351acc65ee3SPavan Nikhilesh 1352acc65ee3SPavan Nikhilesh if (info.event_dev_cap & RTE_EVENT_DEV_CAP_EVENT_PRESCHEDULE_ADAPTIVE) { 1353acc65ee3SPavan Nikhilesh rte_event_dev_stop(TEST_DEV_ID); 1354acc65ee3SPavan Nikhilesh rc = preschedule_configure(RTE_EVENT_PRESCHEDULE_ADAPTIVE, &info); 1355acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to configure eventdev"); 1356acc65ee3SPavan Nikhilesh rc = preschedule_test(RTE_EVENT_PRESCHEDULE_ADAPTIVE, 1357c1bdd86dSPavan Nikhilesh "RTE_EVENT_PRESCHEDULE_ADAPTIVE", 0); 1358acc65ee3SPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, 1359acc65ee3SPavan Nikhilesh "Failed to test preschedule RTE_EVENT_PRESCHEDULE_ADAPTIVE"); 1360acc65ee3SPavan Nikhilesh } 1361acc65ee3SPavan Nikhilesh 1362acc65ee3SPavan Nikhilesh return TEST_SUCCESS; 1363acc65ee3SPavan Nikhilesh } 1364acc65ee3SPavan Nikhilesh 1365acc65ee3SPavan Nikhilesh static int 1366c1bdd86dSPavan Nikhilesh test_eventdev_preschedule_modify(void) 1367c1bdd86dSPavan Nikhilesh { 1368c1bdd86dSPavan Nikhilesh struct rte_event_dev_info info; 1369c1bdd86dSPavan Nikhilesh int rc; 1370c1bdd86dSPavan Nikhilesh 1371c1bdd86dSPavan Nikhilesh rte_event_dev_info_get(TEST_DEV_ID, &info); 1372c1bdd86dSPavan Nikhilesh if ((info.event_dev_cap & RTE_EVENT_DEV_CAP_PER_PORT_PRESCHEDULE) == 0) 1373c1bdd86dSPavan Nikhilesh return TEST_SKIPPED; 1374c1bdd86dSPavan Nikhilesh 1375c1bdd86dSPavan Nikhilesh rc = preschedule_configure(RTE_EVENT_PRESCHEDULE_NONE, &info); 1376c1bdd86dSPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to configure eventdev"); 1377c1bdd86dSPavan Nikhilesh rc = preschedule_test(RTE_EVENT_PRESCHEDULE_NONE, "RTE_EVENT_PRESCHEDULE_NONE", 1); 1378c1bdd86dSPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to test per port preschedule RTE_EVENT_PRESCHEDULE_NONE"); 1379c1bdd86dSPavan Nikhilesh 1380c1bdd86dSPavan Nikhilesh rc = preschedule_test(RTE_EVENT_PRESCHEDULE, "RTE_EVENT_PRESCHEDULE", 1); 1381c1bdd86dSPavan Nikhilesh TEST_ASSERT_SUCCESS(rc, "Failed to test per port preschedule RTE_EVENT_PRESCHEDULE"); 1382c1bdd86dSPavan Nikhilesh 1383c1bdd86dSPavan Nikhilesh if (info.event_dev_cap & RTE_EVENT_DEV_CAP_EVENT_PRESCHEDULE_ADAPTIVE) { 1384c1bdd86dSPavan Nikhilesh rc = preschedule_test(RTE_EVENT_PRESCHEDULE_ADAPTIVE, 1385c1bdd86dSPavan Nikhilesh "RTE_EVENT_PRESCHEDULE_ADAPTIVE", 1); 1386c1bdd86dSPavan Nikhilesh TEST_ASSERT_SUCCESS( 1387c1bdd86dSPavan Nikhilesh rc, "Failed to test per port preschedule RTE_EVENT_PRESCHEDULE_ADAPTIVE"); 1388c1bdd86dSPavan Nikhilesh } 1389c1bdd86dSPavan Nikhilesh 1390c1bdd86dSPavan Nikhilesh return TEST_SUCCESS; 1391c1bdd86dSPavan Nikhilesh } 1392c1bdd86dSPavan Nikhilesh 1393c1bdd86dSPavan Nikhilesh static int 1394a9de470cSBruce Richardson test_eventdev_close(void) 1395a9de470cSBruce Richardson { 1396a9de470cSBruce Richardson rte_event_dev_stop(TEST_DEV_ID); 1397a9de470cSBruce Richardson return rte_event_dev_close(TEST_DEV_ID); 1398a9de470cSBruce Richardson } 1399a9de470cSBruce Richardson 1400a9de470cSBruce Richardson static struct unit_test_suite eventdev_common_testsuite = { 1401a9de470cSBruce Richardson .suite_name = "eventdev common code unit test suite", 1402a9de470cSBruce Richardson .setup = testsuite_setup, 1403a9de470cSBruce Richardson .teardown = testsuite_teardown, 1404a9de470cSBruce Richardson .unit_test_cases = { 1405a9de470cSBruce Richardson TEST_CASE_ST(NULL, NULL, 1406a9de470cSBruce Richardson test_eventdev_count), 1407a9de470cSBruce Richardson TEST_CASE_ST(NULL, NULL, 1408a9de470cSBruce Richardson test_eventdev_get_dev_id), 1409a9de470cSBruce Richardson TEST_CASE_ST(NULL, NULL, 1410a9de470cSBruce Richardson test_eventdev_socket_id), 1411a9de470cSBruce Richardson TEST_CASE_ST(NULL, NULL, 1412a9de470cSBruce Richardson test_eventdev_info_get), 1413a9de470cSBruce Richardson TEST_CASE_ST(NULL, NULL, 1414a9de470cSBruce Richardson test_eventdev_configure), 1415a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1416a9de470cSBruce Richardson test_eventdev_queue_default_conf_get), 1417a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1418a9de470cSBruce Richardson test_eventdev_queue_setup), 1419a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1420a9de470cSBruce Richardson test_eventdev_queue_count), 1421a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1422a9de470cSBruce Richardson test_eventdev_queue_attr_priority), 1423deb450c4SShijith Thotton TEST_CASE_ST(eventdev_configure_setup, eventdev_stop_device, 1424deb450c4SShijith Thotton test_eventdev_queue_attr_priority_runtime), 1425deb450c4SShijith Thotton TEST_CASE_ST(eventdev_configure_setup, NULL, 1426deb450c4SShijith Thotton test_eventdev_queue_attr_weight_runtime), 1427deb450c4SShijith Thotton TEST_CASE_ST(eventdev_configure_setup, NULL, 1428deb450c4SShijith Thotton test_eventdev_queue_attr_affinity_runtime), 1429a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1430a9de470cSBruce Richardson test_eventdev_queue_attr_nb_atomic_flows), 1431a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1432a9de470cSBruce Richardson test_eventdev_queue_attr_nb_atomic_order_sequences), 1433a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1434a9de470cSBruce Richardson test_eventdev_queue_attr_event_queue_cfg), 1435a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1436a9de470cSBruce Richardson test_eventdev_port_default_conf_get), 1437a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1438a9de470cSBruce Richardson test_eventdev_port_setup), 1439a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1440a9de470cSBruce Richardson test_eventdev_port_attr_dequeue_depth), 1441a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1442a9de470cSBruce Richardson test_eventdev_port_attr_enqueue_depth), 1443a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1444a9de470cSBruce Richardson test_eventdev_port_attr_new_event_threshold), 1445a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1446a9de470cSBruce Richardson test_eventdev_port_count), 1447a9de470cSBruce Richardson TEST_CASE_ST(eventdev_configure_setup, NULL, 1448a9de470cSBruce Richardson test_eventdev_timeout_ticks), 1449a9de470cSBruce Richardson TEST_CASE_ST(NULL, NULL, 1450a9de470cSBruce Richardson test_eventdev_start_stop), 1451d007a7f3SPavan Nikhilesh TEST_CASE_ST(eventdev_configure_setup, eventdev_stop_device, 1452d007a7f3SPavan Nikhilesh test_eventdev_profile_switch), 1453b74f298fSPavan Nikhilesh TEST_CASE_ST(eventdev_configure_setup, eventdev_stop_device, 1454acc65ee3SPavan Nikhilesh test_eventdev_preschedule_configure), 1455c1bdd86dSPavan Nikhilesh TEST_CASE_ST(eventdev_configure_setup, eventdev_stop_device, 1456c1bdd86dSPavan Nikhilesh test_eventdev_preschedule_modify), 1457a9de470cSBruce Richardson TEST_CASE_ST(eventdev_setup_device, eventdev_stop_device, 1458a9de470cSBruce Richardson test_eventdev_link), 1459a9de470cSBruce Richardson TEST_CASE_ST(eventdev_setup_device, eventdev_stop_device, 1460a9de470cSBruce Richardson test_eventdev_unlink), 1461a9de470cSBruce Richardson TEST_CASE_ST(eventdev_setup_device, eventdev_stop_device, 1462a9de470cSBruce Richardson test_eventdev_link_get), 1463a9de470cSBruce Richardson TEST_CASE_ST(eventdev_setup_device, NULL, 1464a9de470cSBruce Richardson test_eventdev_close), 1465a9de470cSBruce Richardson TEST_CASES_END() /**< NULL terminate unit test array */ 1466a9de470cSBruce Richardson } 1467a9de470cSBruce Richardson }; 1468a9de470cSBruce Richardson 1469a9de470cSBruce Richardson static int 1470a9de470cSBruce Richardson test_eventdev_common(void) 1471a9de470cSBruce Richardson { 1472a9de470cSBruce Richardson return unit_test_suite_runner(&eventdev_common_testsuite); 1473a9de470cSBruce Richardson } 1474a9de470cSBruce Richardson 1475a9de470cSBruce Richardson static int 1476a9de470cSBruce Richardson test_eventdev_selftest_impl(const char *pmd, const char *opts) 1477a9de470cSBruce Richardson { 14782155b9caSPavan Nikhilesh int ret = 0; 14792155b9caSPavan Nikhilesh 1480e0f4a0edSDavid Marchand if (rte_event_dev_get_dev_id(pmd) == -ENODEV) 14812155b9caSPavan Nikhilesh ret = rte_vdev_init(pmd, opts); 14822155b9caSPavan Nikhilesh if (ret) 1483e0f4a0edSDavid Marchand return TEST_SKIPPED; 14842155b9caSPavan Nikhilesh 1485a9de470cSBruce Richardson return rte_event_dev_selftest(rte_event_dev_get_dev_id(pmd)); 1486a9de470cSBruce Richardson } 1487a9de470cSBruce Richardson 1488a9de470cSBruce Richardson static int 1489a9de470cSBruce Richardson test_eventdev_selftest_sw(void) 1490a9de470cSBruce Richardson { 1491a9de470cSBruce Richardson return test_eventdev_selftest_impl("event_sw", ""); 1492a9de470cSBruce Richardson } 1493a9de470cSBruce Richardson 1494a9de470cSBruce Richardson static int 1495a9de470cSBruce Richardson test_eventdev_selftest_octeontx(void) 1496a9de470cSBruce Richardson { 1497a9de470cSBruce Richardson return test_eventdev_selftest_impl("event_octeontx", ""); 1498a9de470cSBruce Richardson } 1499a9de470cSBruce Richardson 150062561532SPavan Nikhilesh static int 1501a439f622SHemant Agrawal test_eventdev_selftest_dpaa2(void) 1502a439f622SHemant Agrawal { 1503a439f622SHemant Agrawal return test_eventdev_selftest_impl("event_dpaa2", ""); 1504a439f622SHemant Agrawal } 1505a439f622SHemant Agrawal 15066f1b8288STimothy McDaniel static int 15076f1b8288STimothy McDaniel test_eventdev_selftest_dlb2(void) 15086f1b8288STimothy McDaniel { 15096f1b8288STimothy McDaniel return test_eventdev_selftest_impl("dlb2_event", ""); 15106f1b8288STimothy McDaniel } 15116f1b8288STimothy McDaniel 151223515064SPavan Nikhilesh static int 151323515064SPavan Nikhilesh test_eventdev_selftest_cn9k(void) 151423515064SPavan Nikhilesh { 151523515064SPavan Nikhilesh return test_eventdev_selftest_impl("event_cn9k", ""); 151623515064SPavan Nikhilesh } 151723515064SPavan Nikhilesh 151823515064SPavan Nikhilesh static int 151923515064SPavan Nikhilesh test_eventdev_selftest_cn10k(void) 152023515064SPavan Nikhilesh { 152123515064SPavan Nikhilesh return test_eventdev_selftest_impl("event_cn10k", ""); 152223515064SPavan Nikhilesh } 152323515064SPavan Nikhilesh 1524*6305afeeSPavan Nikhilesh static int 1525*6305afeeSPavan Nikhilesh test_eventdev_selftest_cn20k(void) 1526*6305afeeSPavan Nikhilesh { 1527*6305afeeSPavan Nikhilesh return test_eventdev_selftest_impl("event_cn20k", ""); 1528*6305afeeSPavan Nikhilesh } 1529*6305afeeSPavan Nikhilesh 15303c60274cSJie Zhou #endif /* !RTE_EXEC_ENV_WINDOWS */ 15313c60274cSJie Zhou 1532e0a8442cSBruce Richardson REGISTER_FAST_TEST(eventdev_common_autotest, true, true, test_eventdev_common); 15333c60274cSJie Zhou 15343c60274cSJie Zhou #ifndef RTE_EXEC_ENV_WINDOWS 1535aee48294SBruce Richardson REGISTER_FAST_TEST(eventdev_selftest_sw, true, true, test_eventdev_selftest_sw); 1536d83fb967SDavid Marchand REGISTER_DRIVER_TEST(eventdev_selftest_octeontx, test_eventdev_selftest_octeontx); 15373864b310SBruce Richardson REGISTER_DRIVER_TEST(eventdev_selftest_dpaa2, test_eventdev_selftest_dpaa2); 15383864b310SBruce Richardson REGISTER_DRIVER_TEST(eventdev_selftest_dlb2, test_eventdev_selftest_dlb2); 15393864b310SBruce Richardson REGISTER_DRIVER_TEST(eventdev_selftest_cn9k, test_eventdev_selftest_cn9k); 15403864b310SBruce Richardson REGISTER_DRIVER_TEST(eventdev_selftest_cn10k, test_eventdev_selftest_cn10k); 1541*6305afeeSPavan Nikhilesh REGISTER_DRIVER_TEST(eventdev_selftest_cn20k, test_eventdev_selftest_cn20k); 15423c60274cSJie Zhou 15433c60274cSJie Zhou #endif /* !RTE_EXEC_ENV_WINDOWS */ 1544