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 Yalavarthiml_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