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)58ml_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