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