xref: /dpdk/app/test-mldev/ml_main.c (revision 388a5681fa00162d6c0ffb4fa5875539e1945d67)
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