xref: /f-stack/dpdk/app/test-eventdev/evt_test.h (revision d30ea906)
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