1ac930a55SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2ac930a55SSrikanth Yalavarthi * Copyright (c) 2022 Marvell.
3ac930a55SSrikanth Yalavarthi */
4ac930a55SSrikanth Yalavarthi
5ac930a55SSrikanth Yalavarthi #include <rte_debug.h>
6ac930a55SSrikanth Yalavarthi #include <rte_eal.h>
7ac930a55SSrikanth Yalavarthi #include <rte_mldev.h>
8ac930a55SSrikanth Yalavarthi
9ac930a55SSrikanth Yalavarthi #include "ml_common.h"
10ac930a55SSrikanth Yalavarthi #include "ml_test.h"
11ac930a55SSrikanth Yalavarthi
12ac930a55SSrikanth Yalavarthi struct ml_options opt;
13ac930a55SSrikanth Yalavarthi struct ml_test *test;
14ac930a55SSrikanth Yalavarthi
15ac930a55SSrikanth Yalavarthi int
main(int argc,char ** argv)16ac930a55SSrikanth Yalavarthi main(int argc, char **argv)
17ac930a55SSrikanth Yalavarthi {
18ac930a55SSrikanth Yalavarthi uint16_t mldevs;
19ac930a55SSrikanth Yalavarthi int ret;
20ac930a55SSrikanth Yalavarthi
21ac930a55SSrikanth Yalavarthi ret = rte_eal_init(argc, argv);
22ac930a55SSrikanth Yalavarthi if (ret < 0)
23ac930a55SSrikanth Yalavarthi rte_panic("invalid EAL arguments\n");
24ac930a55SSrikanth Yalavarthi argc -= ret;
25ac930a55SSrikanth Yalavarthi argv += ret;
26ac930a55SSrikanth Yalavarthi
27ac930a55SSrikanth Yalavarthi mldevs = rte_ml_dev_count();
28*388a5681SSrikanth Yalavarthi if (!mldevs) {
29*388a5681SSrikanth Yalavarthi ml_err("no mldev devices found\n");
30*388a5681SSrikanth Yalavarthi goto error;
31*388a5681SSrikanth Yalavarthi }
32ac930a55SSrikanth Yalavarthi
33ac930a55SSrikanth Yalavarthi /* set default values for options */
34ac930a55SSrikanth Yalavarthi ml_options_default(&opt);
35ac930a55SSrikanth Yalavarthi
36ac930a55SSrikanth Yalavarthi /* parse the command line arguments */
37ac930a55SSrikanth Yalavarthi ret = ml_options_parse(&opt, argc, argv);
38ac930a55SSrikanth Yalavarthi if (ret) {
39ac930a55SSrikanth Yalavarthi ml_err("parsing one or more user options failed");
40ac930a55SSrikanth Yalavarthi goto error;
41ac930a55SSrikanth Yalavarthi }
42ac930a55SSrikanth Yalavarthi
43ac930a55SSrikanth Yalavarthi /* get test struct from name */
44ac930a55SSrikanth Yalavarthi test = ml_test_get(opt.test_name);
45ac930a55SSrikanth Yalavarthi if (test == NULL) {
46ac930a55SSrikanth Yalavarthi ml_err("failed to find requested test: %s", opt.test_name);
47ac930a55SSrikanth Yalavarthi goto error;
48ac930a55SSrikanth Yalavarthi }
49ac930a55SSrikanth Yalavarthi
50ac930a55SSrikanth Yalavarthi if (test->ops.test_result == NULL) {
51ac930a55SSrikanth Yalavarthi ml_err("%s: ops.test_result not found", opt.test_name);
52ac930a55SSrikanth Yalavarthi goto error;
53ac930a55SSrikanth Yalavarthi }
54ac930a55SSrikanth Yalavarthi
55ac930a55SSrikanth Yalavarthi /* check test options */
56ac930a55SSrikanth Yalavarthi if (test->ops.opt_check) {
57ac930a55SSrikanth Yalavarthi if (test->ops.opt_check(&opt)) {
58ac930a55SSrikanth Yalavarthi ml_err("invalid command line argument");
59ac930a55SSrikanth Yalavarthi goto error;
60ac930a55SSrikanth Yalavarthi }
61ac930a55SSrikanth Yalavarthi }
62ac930a55SSrikanth Yalavarthi
63ac930a55SSrikanth Yalavarthi /* check the device capability */
64ac930a55SSrikanth Yalavarthi if (test->ops.cap_check) {
65ac930a55SSrikanth Yalavarthi if (test->ops.cap_check(&opt) == false) {
66ac930a55SSrikanth Yalavarthi ml_info("unsupported test: %s", opt.test_name);
67ac930a55SSrikanth Yalavarthi ret = ML_TEST_UNSUPPORTED;
68ac930a55SSrikanth Yalavarthi goto no_cap;
69ac930a55SSrikanth Yalavarthi }
70ac930a55SSrikanth Yalavarthi }
71ac930a55SSrikanth Yalavarthi
72ac930a55SSrikanth Yalavarthi /* dump options */
73ac930a55SSrikanth Yalavarthi if (opt.debug) {
74ac930a55SSrikanth Yalavarthi if (test->ops.opt_dump)
75ac930a55SSrikanth Yalavarthi test->ops.opt_dump(&opt);
76ac930a55SSrikanth Yalavarthi }
77ac930a55SSrikanth Yalavarthi
78ac930a55SSrikanth Yalavarthi /* test specific setup */
79ac930a55SSrikanth Yalavarthi if (test->ops.test_setup) {
80ac930a55SSrikanth Yalavarthi if (test->ops.test_setup(test, &opt)) {
81ac930a55SSrikanth Yalavarthi ml_err("failed to setup test: %s", opt.test_name);
82ac930a55SSrikanth Yalavarthi goto error;
83ac930a55SSrikanth Yalavarthi }
84ac930a55SSrikanth Yalavarthi }
85ac930a55SSrikanth Yalavarthi
86ac930a55SSrikanth Yalavarthi /* test driver */
87ac930a55SSrikanth Yalavarthi if (test->ops.test_driver)
88ac930a55SSrikanth Yalavarthi test->ops.test_driver(test, &opt);
89ac930a55SSrikanth Yalavarthi
90ac930a55SSrikanth Yalavarthi /* get result */
91ac930a55SSrikanth Yalavarthi if (test->ops.test_result)
92ac930a55SSrikanth Yalavarthi ret = test->ops.test_result(test, &opt);
93ac930a55SSrikanth Yalavarthi
94ac930a55SSrikanth Yalavarthi if (test->ops.test_destroy)
95ac930a55SSrikanth Yalavarthi test->ops.test_destroy(test, &opt);
96ac930a55SSrikanth Yalavarthi
97ac930a55SSrikanth Yalavarthi no_cap:
98ac930a55SSrikanth Yalavarthi if (ret == ML_TEST_SUCCESS) {
99ac930a55SSrikanth Yalavarthi printf("Result: " CLGRN "%s" CLNRM "\n", "Success");
100ac930a55SSrikanth Yalavarthi } else if (ret == ML_TEST_FAILED) {
101ac930a55SSrikanth Yalavarthi printf("Result: " CLRED "%s" CLNRM "\n", "Failed");
102ac930a55SSrikanth Yalavarthi return EXIT_FAILURE;
103ac930a55SSrikanth Yalavarthi } else if (ret == ML_TEST_UNSUPPORTED) {
104ac930a55SSrikanth Yalavarthi printf("Result: " CLYEL "%s" CLNRM "\n", "Unsupported");
105ac930a55SSrikanth Yalavarthi }
106ac930a55SSrikanth Yalavarthi
107ac930a55SSrikanth Yalavarthi rte_eal_cleanup();
108ac930a55SSrikanth Yalavarthi
109ac930a55SSrikanth Yalavarthi return 0;
110ac930a55SSrikanth Yalavarthi
111ac930a55SSrikanth Yalavarthi error:
112ac930a55SSrikanth Yalavarthi rte_eal_cleanup();
113ac930a55SSrikanth Yalavarthi
114ac930a55SSrikanth Yalavarthi return EXIT_FAILURE;
115ac930a55SSrikanth Yalavarthi }
116