1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*d30ea906Sjfb8856606 * Copyright(c) 2017 Cavium, Inc
32bfe3f2eSlogwang */
42bfe3f2eSlogwang
52bfe3f2eSlogwang #ifndef _EVT_TEST_
62bfe3f2eSlogwang #define _EVT_TEST_
72bfe3f2eSlogwang
82bfe3f2eSlogwang #include <string.h>
92bfe3f2eSlogwang #include <stdbool.h>
102bfe3f2eSlogwang #include <sys/queue.h>
112bfe3f2eSlogwang
122bfe3f2eSlogwang #include <rte_eal.h>
132bfe3f2eSlogwang
142bfe3f2eSlogwang enum evt_test_result {
152bfe3f2eSlogwang EVT_TEST_SUCCESS,
162bfe3f2eSlogwang EVT_TEST_FAILED,
172bfe3f2eSlogwang EVT_TEST_UNSUPPORTED,
182bfe3f2eSlogwang };
192bfe3f2eSlogwang
202bfe3f2eSlogwang struct evt_test;
212bfe3f2eSlogwang struct evt_options;
222bfe3f2eSlogwang
232bfe3f2eSlogwang typedef bool (*evt_test_capability_check_t)(struct evt_options *opt);
242bfe3f2eSlogwang typedef int (*evt_test_options_check_t)(struct evt_options *opt);
252bfe3f2eSlogwang typedef void (*evt_test_options_dump_t)(struct evt_options *opt);
262bfe3f2eSlogwang typedef int (*evt_test_setup_t)
272bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
282bfe3f2eSlogwang typedef int (*evt_test_mempool_setup_t)
292bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
302bfe3f2eSlogwang typedef int (*evt_test_ethdev_setup_t)
312bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
322bfe3f2eSlogwang typedef int (*evt_test_eventdev_setup_t)
332bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
342bfe3f2eSlogwang typedef int (*evt_test_launch_lcores_t)
352bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
362bfe3f2eSlogwang typedef int (*evt_test_result_t)
372bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
382bfe3f2eSlogwang typedef void (*evt_test_eventdev_destroy_t)
392bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
402bfe3f2eSlogwang typedef void (*evt_test_ethdev_destroy_t)
412bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
422bfe3f2eSlogwang typedef void (*evt_test_mempool_destroy_t)
432bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
442bfe3f2eSlogwang typedef void (*evt_test_destroy_t)
452bfe3f2eSlogwang (struct evt_test *test, struct evt_options *opt);
462bfe3f2eSlogwang
472bfe3f2eSlogwang struct evt_test_ops {
482bfe3f2eSlogwang evt_test_capability_check_t cap_check;
492bfe3f2eSlogwang evt_test_options_check_t opt_check;
502bfe3f2eSlogwang evt_test_options_dump_t opt_dump;
512bfe3f2eSlogwang evt_test_setup_t test_setup;
522bfe3f2eSlogwang evt_test_mempool_setup_t mempool_setup;
532bfe3f2eSlogwang evt_test_ethdev_setup_t ethdev_setup;
542bfe3f2eSlogwang evt_test_eventdev_setup_t eventdev_setup;
552bfe3f2eSlogwang evt_test_launch_lcores_t launch_lcores;
562bfe3f2eSlogwang evt_test_result_t test_result;
572bfe3f2eSlogwang evt_test_eventdev_destroy_t eventdev_destroy;
582bfe3f2eSlogwang evt_test_ethdev_destroy_t ethdev_destroy;
592bfe3f2eSlogwang evt_test_mempool_destroy_t mempool_destroy;
602bfe3f2eSlogwang evt_test_destroy_t test_destroy;
612bfe3f2eSlogwang };
622bfe3f2eSlogwang
632bfe3f2eSlogwang struct evt_test {
642bfe3f2eSlogwang const char *name;
652bfe3f2eSlogwang void *test_priv;
662bfe3f2eSlogwang struct evt_test_ops ops;
672bfe3f2eSlogwang };
682bfe3f2eSlogwang
692bfe3f2eSlogwang struct evt_test_entry {
702bfe3f2eSlogwang struct evt_test test;
712bfe3f2eSlogwang
722bfe3f2eSlogwang STAILQ_ENTRY(evt_test_entry) next;
732bfe3f2eSlogwang };
742bfe3f2eSlogwang
752bfe3f2eSlogwang void evt_test_register(struct evt_test_entry *test);
762bfe3f2eSlogwang void evt_test_dump_names(void);
772bfe3f2eSlogwang
782bfe3f2eSlogwang #define EVT_TEST_REGISTER(nm) \
792bfe3f2eSlogwang static struct evt_test_entry _evt_test_entry_ ##nm; \
80*d30ea906Sjfb8856606 RTE_INIT(evt_test_ ##nm) \
812bfe3f2eSlogwang { \
822bfe3f2eSlogwang _evt_test_entry_ ##nm.test.name = RTE_STR(nm);\
832bfe3f2eSlogwang memcpy(&_evt_test_entry_ ##nm.test.ops, &nm, \
842bfe3f2eSlogwang sizeof(struct evt_test_ops)); \
852bfe3f2eSlogwang evt_test_register(&_evt_test_entry_ ##nm); \
862bfe3f2eSlogwang }
872bfe3f2eSlogwang
882bfe3f2eSlogwang struct evt_test *evt_test_get(const char *name);
892bfe3f2eSlogwang
902bfe3f2eSlogwang static inline void *
evt_test_priv(struct evt_test * test)912bfe3f2eSlogwang evt_test_priv(struct evt_test *test)
922bfe3f2eSlogwang {
932bfe3f2eSlogwang return test->test_priv;
942bfe3f2eSlogwang }
952bfe3f2eSlogwang
962bfe3f2eSlogwang #endif /* _EVT_TEST_ */
97