xref: /dpdk/app/test-mldev/ml_test.h (revision ac930a554457ce244109f51f1f14939b59b8f4dc)
1*ac930a55SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2*ac930a55SSrikanth Yalavarthi  * Copyright (c) 2022 Marvell.
3*ac930a55SSrikanth Yalavarthi  */
4*ac930a55SSrikanth Yalavarthi 
5*ac930a55SSrikanth Yalavarthi #ifndef ML_TEST_H
6*ac930a55SSrikanth Yalavarthi #define ML_TEST_H
7*ac930a55SSrikanth Yalavarthi 
8*ac930a55SSrikanth Yalavarthi #include <stdio.h>
9*ac930a55SSrikanth Yalavarthi #include <stdlib.h>
10*ac930a55SSrikanth Yalavarthi #include <string.h>
11*ac930a55SSrikanth Yalavarthi #include <sys/queue.h>
12*ac930a55SSrikanth Yalavarthi 
13*ac930a55SSrikanth Yalavarthi #include <rte_common.h>
14*ac930a55SSrikanth Yalavarthi 
15*ac930a55SSrikanth Yalavarthi #include "ml_options.h"
16*ac930a55SSrikanth Yalavarthi 
17*ac930a55SSrikanth Yalavarthi #define ML_TEST_MAX_POOL_SIZE 256
18*ac930a55SSrikanth Yalavarthi 
19*ac930a55SSrikanth Yalavarthi enum ml_test_result {
20*ac930a55SSrikanth Yalavarthi 	ML_TEST_SUCCESS,
21*ac930a55SSrikanth Yalavarthi 	ML_TEST_FAILED,
22*ac930a55SSrikanth Yalavarthi 	ML_TEST_UNSUPPORTED,
23*ac930a55SSrikanth Yalavarthi };
24*ac930a55SSrikanth Yalavarthi 
25*ac930a55SSrikanth Yalavarthi struct ml_test;
26*ac930a55SSrikanth Yalavarthi 
27*ac930a55SSrikanth Yalavarthi typedef bool (*ml_test_capability_check_t)(struct ml_options *opt);
28*ac930a55SSrikanth Yalavarthi typedef int (*ml_test_options_check_t)(struct ml_options *opt);
29*ac930a55SSrikanth Yalavarthi typedef void (*ml_test_options_dump_t)(struct ml_options *opt);
30*ac930a55SSrikanth Yalavarthi typedef int (*ml_test_setup_t)(struct ml_test *test, struct ml_options *opt);
31*ac930a55SSrikanth Yalavarthi typedef void (*ml_test_destroy_t)(struct ml_test *test, struct ml_options *opt);
32*ac930a55SSrikanth Yalavarthi typedef int (*ml_test_driver_t)(struct ml_test *test, struct ml_options *opt);
33*ac930a55SSrikanth Yalavarthi typedef int (*ml_test_result_t)(struct ml_test *test, struct ml_options *opt);
34*ac930a55SSrikanth Yalavarthi 
35*ac930a55SSrikanth Yalavarthi struct ml_test_ops {
36*ac930a55SSrikanth Yalavarthi 	ml_test_capability_check_t cap_check;
37*ac930a55SSrikanth Yalavarthi 	ml_test_options_check_t opt_check;
38*ac930a55SSrikanth Yalavarthi 	ml_test_options_dump_t opt_dump;
39*ac930a55SSrikanth Yalavarthi 	ml_test_setup_t test_setup;
40*ac930a55SSrikanth Yalavarthi 	ml_test_destroy_t test_destroy;
41*ac930a55SSrikanth Yalavarthi 	ml_test_driver_t test_driver;
42*ac930a55SSrikanth Yalavarthi 	ml_test_result_t test_result;
43*ac930a55SSrikanth Yalavarthi };
44*ac930a55SSrikanth Yalavarthi 
45*ac930a55SSrikanth Yalavarthi struct ml_test {
46*ac930a55SSrikanth Yalavarthi 	const char *name;
47*ac930a55SSrikanth Yalavarthi 	void *test_priv;
48*ac930a55SSrikanth Yalavarthi 	struct ml_test_ops ops;
49*ac930a55SSrikanth Yalavarthi };
50*ac930a55SSrikanth Yalavarthi 
51*ac930a55SSrikanth Yalavarthi struct ml_test_entry {
52*ac930a55SSrikanth Yalavarthi 	struct ml_test test;
53*ac930a55SSrikanth Yalavarthi 
54*ac930a55SSrikanth Yalavarthi 	STAILQ_ENTRY(ml_test_entry) next;
55*ac930a55SSrikanth Yalavarthi };
56*ac930a55SSrikanth Yalavarthi 
57*ac930a55SSrikanth Yalavarthi static inline void *
ml_test_priv(struct ml_test * test)58*ac930a55SSrikanth Yalavarthi ml_test_priv(struct ml_test *test)
59*ac930a55SSrikanth Yalavarthi {
60*ac930a55SSrikanth Yalavarthi 	return test->test_priv;
61*ac930a55SSrikanth Yalavarthi }
62*ac930a55SSrikanth Yalavarthi 
63*ac930a55SSrikanth Yalavarthi struct ml_test *ml_test_get(const char *name);
64*ac930a55SSrikanth Yalavarthi void ml_test_register(struct ml_test_entry *test);
65*ac930a55SSrikanth Yalavarthi void ml_test_dump_names(void (*f)(const char *));
66*ac930a55SSrikanth Yalavarthi 
67*ac930a55SSrikanth Yalavarthi #define ML_TEST_REGISTER(nm) \
68*ac930a55SSrikanth Yalavarthi 	static struct ml_test_entry _ml_test_entry_##nm; \
69*ac930a55SSrikanth Yalavarthi 	RTE_INIT(ml_test_##nm) \
70*ac930a55SSrikanth Yalavarthi 	{ \
71*ac930a55SSrikanth Yalavarthi 		_ml_test_entry_##nm.test.name = RTE_STR(nm); \
72*ac930a55SSrikanth Yalavarthi 		memcpy(&_ml_test_entry_##nm.test.ops, &nm, sizeof(struct ml_test_ops)); \
73*ac930a55SSrikanth Yalavarthi 		ml_test_register(&_ml_test_entry_##nm); \
74*ac930a55SSrikanth Yalavarthi 	}
75*ac930a55SSrikanth Yalavarthi 
76*ac930a55SSrikanth Yalavarthi #endif /* ML_TEST_H */
77