1ac930a55SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2ac930a55SSrikanth Yalavarthi * Copyright (c) 2022 Marvell.
3ac930a55SSrikanth Yalavarthi */
4ac930a55SSrikanth Yalavarthi
5ac930a55SSrikanth Yalavarthi #include <errno.h>
6ac930a55SSrikanth Yalavarthi #include <getopt.h>
7da679339SSrikanth Yalavarthi #include <math.h>
8ac930a55SSrikanth Yalavarthi
9ac930a55SSrikanth Yalavarthi #include <rte_memory.h>
10ac930a55SSrikanth Yalavarthi #include <rte_mldev.h>
11ac930a55SSrikanth Yalavarthi #include <rte_string_fns.h>
12ac930a55SSrikanth Yalavarthi
13ac930a55SSrikanth Yalavarthi #include "ml_common.h"
14ac930a55SSrikanth Yalavarthi #include "ml_test.h"
15ac930a55SSrikanth Yalavarthi #include "parser.h"
16ac930a55SSrikanth Yalavarthi
17ac930a55SSrikanth Yalavarthi typedef int (*option_parser_t)(struct ml_options *opt, const char *arg);
18ac930a55SSrikanth Yalavarthi
19ac930a55SSrikanth Yalavarthi void
ml_options_default(struct ml_options * opt)20ac930a55SSrikanth Yalavarthi ml_options_default(struct ml_options *opt)
21ac930a55SSrikanth Yalavarthi {
22ac930a55SSrikanth Yalavarthi memset(opt, 0, sizeof(*opt));
23bb38d854SSrikanth Yalavarthi strlcpy(opt->test_name, "device_ops", ML_TEST_NAME_MAX_LEN);
24ac930a55SSrikanth Yalavarthi opt->dev_id = 0;
25ac930a55SSrikanth Yalavarthi opt->socket_id = SOCKET_ID_ANY;
26f6661e6dSSrikanth Yalavarthi opt->nb_filelist = 0;
27671e9c20SAnup Prabhu opt->quantized_io = false;
28bbd272edSSrikanth Yalavarthi opt->repetitions = 1;
2939890f07SSrikanth Yalavarthi opt->burst_size = 1;
30c0e87165SSrikanth Yalavarthi opt->queue_pairs = 1;
31c0e87165SSrikanth Yalavarthi opt->queue_size = 1;
32da679339SSrikanth Yalavarthi opt->tolerance = 0.0;
335a82bc33SSrikanth Yalavarthi opt->stats = false;
34ac930a55SSrikanth Yalavarthi opt->debug = false;
35ac930a55SSrikanth Yalavarthi }
36ac930a55SSrikanth Yalavarthi
37ac930a55SSrikanth Yalavarthi struct long_opt_parser {
38ac930a55SSrikanth Yalavarthi const char *lgopt_name;
39ac930a55SSrikanth Yalavarthi option_parser_t parser_fn;
40ac930a55SSrikanth Yalavarthi };
41ac930a55SSrikanth Yalavarthi
42ac930a55SSrikanth Yalavarthi static int
ml_parse_test_name(struct ml_options * opt,const char * arg)43ac930a55SSrikanth Yalavarthi ml_parse_test_name(struct ml_options *opt, const char *arg)
44ac930a55SSrikanth Yalavarthi {
45ac930a55SSrikanth Yalavarthi strlcpy(opt->test_name, arg, ML_TEST_NAME_MAX_LEN);
4628a4a819SSrikanth Yalavarthi
47ac930a55SSrikanth Yalavarthi return 0;
48ac930a55SSrikanth Yalavarthi }
49ac930a55SSrikanth Yalavarthi
50ac930a55SSrikanth Yalavarthi static int
ml_parse_dev_id(struct ml_options * opt,const char * arg)51ac930a55SSrikanth Yalavarthi ml_parse_dev_id(struct ml_options *opt, const char *arg)
52ac930a55SSrikanth Yalavarthi {
53ac930a55SSrikanth Yalavarthi int ret;
54ac930a55SSrikanth Yalavarthi
55ac930a55SSrikanth Yalavarthi ret = parser_read_int16(&opt->dev_id, arg);
56ac930a55SSrikanth Yalavarthi if (ret < 0)
5728a4a819SSrikanth Yalavarthi ml_err("Invalid option: dev_id = %s\n", arg);
58ac930a55SSrikanth Yalavarthi
59ac930a55SSrikanth Yalavarthi return ret;
60ac930a55SSrikanth Yalavarthi }
61ac930a55SSrikanth Yalavarthi
62ac930a55SSrikanth Yalavarthi static int
ml_parse_socket_id(struct ml_options * opt,const char * arg)63ac930a55SSrikanth Yalavarthi ml_parse_socket_id(struct ml_options *opt, const char *arg)
64ac930a55SSrikanth Yalavarthi {
6528a4a819SSrikanth Yalavarthi int ret;
66ac930a55SSrikanth Yalavarthi
6728a4a819SSrikanth Yalavarthi ret = parser_read_int32(&opt->socket_id, arg);
6828a4a819SSrikanth Yalavarthi if (ret < 0)
6928a4a819SSrikanth Yalavarthi ml_err("Invalid option: socket_id = %s\n", arg);
7028a4a819SSrikanth Yalavarthi
7128a4a819SSrikanth Yalavarthi return ret;
72ac930a55SSrikanth Yalavarthi }
73ac930a55SSrikanth Yalavarthi
74f6661e6dSSrikanth Yalavarthi static int
ml_parse_models(struct ml_options * opt,const char * arg)75f6661e6dSSrikanth Yalavarthi ml_parse_models(struct ml_options *opt, const char *arg)
76f6661e6dSSrikanth Yalavarthi {
77f6661e6dSSrikanth Yalavarthi const char *delim = ",";
78f6661e6dSSrikanth Yalavarthi char models[PATH_MAX];
79f6661e6dSSrikanth Yalavarthi char *token;
80f6661e6dSSrikanth Yalavarthi int ret = 0;
81f6661e6dSSrikanth Yalavarthi
82f6661e6dSSrikanth Yalavarthi strlcpy(models, arg, PATH_MAX);
83f6661e6dSSrikanth Yalavarthi
84f6661e6dSSrikanth Yalavarthi token = strtok(models, delim);
85f6661e6dSSrikanth Yalavarthi while (token != NULL) {
86f6661e6dSSrikanth Yalavarthi if (opt->nb_filelist >= ML_TEST_MAX_MODELS) {
87f6661e6dSSrikanth Yalavarthi ml_err("Exceeded model count, max = %d\n", ML_TEST_MAX_MODELS);
88f6661e6dSSrikanth Yalavarthi ret = -EINVAL;
89f6661e6dSSrikanth Yalavarthi break;
90f6661e6dSSrikanth Yalavarthi }
91*9280ea55SSrikanth Yalavarthi
92*9280ea55SSrikanth Yalavarthi strlcpy(opt->filelist[opt->nb_filelist].model, token, PATH_MAX);
93*9280ea55SSrikanth Yalavarthi opt->nb_filelist++;
94*9280ea55SSrikanth Yalavarthi
95f6661e6dSSrikanth Yalavarthi token = strtok(NULL, delim);
96f6661e6dSSrikanth Yalavarthi }
97f6661e6dSSrikanth Yalavarthi
98f6661e6dSSrikanth Yalavarthi if (opt->nb_filelist == 0) {
99f6661e6dSSrikanth Yalavarthi ml_err("Models list is empty. Need at least one model for the test");
100f6661e6dSSrikanth Yalavarthi ret = -EINVAL;
101f6661e6dSSrikanth Yalavarthi }
102f6661e6dSSrikanth Yalavarthi
103f6661e6dSSrikanth Yalavarthi return ret;
104f6661e6dSSrikanth Yalavarthi }
105f6661e6dSSrikanth Yalavarthi
106bbd272edSSrikanth Yalavarthi static int
ml_parse_filelist(struct ml_options * opt,const char * arg)107bbd272edSSrikanth Yalavarthi ml_parse_filelist(struct ml_options *opt, const char *arg)
108bbd272edSSrikanth Yalavarthi {
109bbd272edSSrikanth Yalavarthi const char *delim = ",";
110bbd272edSSrikanth Yalavarthi char filelist[PATH_MAX];
111bbd272edSSrikanth Yalavarthi char *token;
112bbd272edSSrikanth Yalavarthi
113bbd272edSSrikanth Yalavarthi if (opt->nb_filelist >= ML_TEST_MAX_MODELS) {
114bbd272edSSrikanth Yalavarthi ml_err("Exceeded filelist count, max = %d\n", ML_TEST_MAX_MODELS);
115bbd272edSSrikanth Yalavarthi return -1;
116bbd272edSSrikanth Yalavarthi }
117bbd272edSSrikanth Yalavarthi
118bbd272edSSrikanth Yalavarthi strlcpy(filelist, arg, PATH_MAX);
119bbd272edSSrikanth Yalavarthi
120bbd272edSSrikanth Yalavarthi /* model */
121bbd272edSSrikanth Yalavarthi token = strtok(filelist, delim);
122bbd272edSSrikanth Yalavarthi if (token == NULL) {
123bbd272edSSrikanth Yalavarthi ml_err("Invalid filelist, model not specified = %s\n", arg);
124bbd272edSSrikanth Yalavarthi return -EINVAL;
125bbd272edSSrikanth Yalavarthi }
126bbd272edSSrikanth Yalavarthi strlcpy(opt->filelist[opt->nb_filelist].model, token, PATH_MAX);
127bbd272edSSrikanth Yalavarthi
128bbd272edSSrikanth Yalavarthi /* input */
129bbd272edSSrikanth Yalavarthi token = strtok(NULL, delim);
130bbd272edSSrikanth Yalavarthi if (token == NULL) {
131bbd272edSSrikanth Yalavarthi ml_err("Invalid filelist, input not specified = %s\n", arg);
132bbd272edSSrikanth Yalavarthi return -EINVAL;
133bbd272edSSrikanth Yalavarthi }
134bbd272edSSrikanth Yalavarthi strlcpy(opt->filelist[opt->nb_filelist].input, token, PATH_MAX);
135bbd272edSSrikanth Yalavarthi
136bbd272edSSrikanth Yalavarthi /* output */
137bbd272edSSrikanth Yalavarthi token = strtok(NULL, delim);
138bbd272edSSrikanth Yalavarthi if (token == NULL) {
139bbd272edSSrikanth Yalavarthi ml_err("Invalid filelist, output not specified = %s\n", arg);
140bbd272edSSrikanth Yalavarthi return -EINVAL;
141bbd272edSSrikanth Yalavarthi }
142bbd272edSSrikanth Yalavarthi strlcpy(opt->filelist[opt->nb_filelist].output, token, PATH_MAX);
143bbd272edSSrikanth Yalavarthi
144da679339SSrikanth Yalavarthi /* reference - optional */
145da679339SSrikanth Yalavarthi token = strtok(NULL, delim);
146da679339SSrikanth Yalavarthi if (token != NULL)
147da679339SSrikanth Yalavarthi strlcpy(opt->filelist[opt->nb_filelist].reference, token, PATH_MAX);
148da679339SSrikanth Yalavarthi else
149da679339SSrikanth Yalavarthi memset(opt->filelist[opt->nb_filelist].reference, 0, PATH_MAX);
150da679339SSrikanth Yalavarthi
15128a4a819SSrikanth Yalavarthi /* check for extra tokens */
15228a4a819SSrikanth Yalavarthi token = strtok(NULL, delim);
15328a4a819SSrikanth Yalavarthi if (token != NULL) {
15428a4a819SSrikanth Yalavarthi ml_err("Invalid filelist. Entries > 4\n.");
15528a4a819SSrikanth Yalavarthi return -EINVAL;
15628a4a819SSrikanth Yalavarthi }
15728a4a819SSrikanth Yalavarthi
158bbd272edSSrikanth Yalavarthi opt->nb_filelist++;
159bbd272edSSrikanth Yalavarthi
160bbd272edSSrikanth Yalavarthi if (opt->nb_filelist == 0) {
16128a4a819SSrikanth Yalavarthi ml_err("Empty filelist. Need at least one filelist entry for the test.\n");
162bbd272edSSrikanth Yalavarthi return -EINVAL;
163bbd272edSSrikanth Yalavarthi }
164bbd272edSSrikanth Yalavarthi
165bbd272edSSrikanth Yalavarthi return 0;
166bbd272edSSrikanth Yalavarthi }
167bbd272edSSrikanth Yalavarthi
168bbd272edSSrikanth Yalavarthi static int
ml_parse_repetitions(struct ml_options * opt,const char * arg)169bbd272edSSrikanth Yalavarthi ml_parse_repetitions(struct ml_options *opt, const char *arg)
170bbd272edSSrikanth Yalavarthi {
17128a4a819SSrikanth Yalavarthi int ret;
17228a4a819SSrikanth Yalavarthi
17328a4a819SSrikanth Yalavarthi ret = parser_read_uint64(&opt->repetitions, arg);
17428a4a819SSrikanth Yalavarthi if (ret != 0)
17528a4a819SSrikanth Yalavarthi ml_err("Invalid option, repetitions = %s\n", arg);
17628a4a819SSrikanth Yalavarthi
17728a4a819SSrikanth Yalavarthi return ret;
178bbd272edSSrikanth Yalavarthi }
179bbd272edSSrikanth Yalavarthi
18039890f07SSrikanth Yalavarthi static int
ml_parse_burst_size(struct ml_options * opt,const char * arg)18139890f07SSrikanth Yalavarthi ml_parse_burst_size(struct ml_options *opt, const char *arg)
18239890f07SSrikanth Yalavarthi {
18328a4a819SSrikanth Yalavarthi int ret;
18428a4a819SSrikanth Yalavarthi
18528a4a819SSrikanth Yalavarthi ret = parser_read_uint16(&opt->burst_size, arg);
18628a4a819SSrikanth Yalavarthi if (ret != 0)
18728a4a819SSrikanth Yalavarthi ml_err("Invalid option, burst_size = %s\n", arg);
18828a4a819SSrikanth Yalavarthi
18928a4a819SSrikanth Yalavarthi return ret;
19039890f07SSrikanth Yalavarthi }
19139890f07SSrikanth Yalavarthi
192c0e87165SSrikanth Yalavarthi static int
ml_parse_queue_pairs(struct ml_options * opt,const char * arg)193c0e87165SSrikanth Yalavarthi ml_parse_queue_pairs(struct ml_options *opt, const char *arg)
194c0e87165SSrikanth Yalavarthi {
195c0e87165SSrikanth Yalavarthi int ret;
196c0e87165SSrikanth Yalavarthi
197c0e87165SSrikanth Yalavarthi ret = parser_read_uint16(&opt->queue_pairs, arg);
19828a4a819SSrikanth Yalavarthi if (ret != 0)
19928a4a819SSrikanth Yalavarthi ml_err("Invalid option, queue_pairs = %s\n", arg);
200c0e87165SSrikanth Yalavarthi
201c0e87165SSrikanth Yalavarthi return ret;
202c0e87165SSrikanth Yalavarthi }
203c0e87165SSrikanth Yalavarthi
204c0e87165SSrikanth Yalavarthi static int
ml_parse_queue_size(struct ml_options * opt,const char * arg)205c0e87165SSrikanth Yalavarthi ml_parse_queue_size(struct ml_options *opt, const char *arg)
206c0e87165SSrikanth Yalavarthi {
20728a4a819SSrikanth Yalavarthi int ret;
20828a4a819SSrikanth Yalavarthi
20928a4a819SSrikanth Yalavarthi ret = parser_read_uint16(&opt->queue_size, arg);
21028a4a819SSrikanth Yalavarthi if (ret != 0)
21128a4a819SSrikanth Yalavarthi ml_err("Invalid option, queue_size = %s\n", arg);
21228a4a819SSrikanth Yalavarthi
21328a4a819SSrikanth Yalavarthi return ret;
214c0e87165SSrikanth Yalavarthi }
215c0e87165SSrikanth Yalavarthi
21638e884b5SSrikanth Yalavarthi static int
ml_parse_tolerance(struct ml_options * opt,const char * arg)217da679339SSrikanth Yalavarthi ml_parse_tolerance(struct ml_options *opt, const char *arg)
218da679339SSrikanth Yalavarthi {
219da679339SSrikanth Yalavarthi opt->tolerance = fabs(atof(arg));
220da679339SSrikanth Yalavarthi
221da679339SSrikanth Yalavarthi return 0;
222da679339SSrikanth Yalavarthi }
223da679339SSrikanth Yalavarthi
224ac930a55SSrikanth Yalavarthi static void
ml_dump_test_options(const char * testname)225ac930a55SSrikanth Yalavarthi ml_dump_test_options(const char *testname)
226ac930a55SSrikanth Yalavarthi {
227c0e87165SSrikanth Yalavarthi if (strcmp(testname, "device_ops") == 0) {
228c0e87165SSrikanth Yalavarthi printf("\t\t--queue_pairs : number of queue pairs to create\n"
2295d41169bSSrikanth Yalavarthi "\t\t--queue_size : size of queue-pair\n");
230bb38d854SSrikanth Yalavarthi printf("\n");
231c0e87165SSrikanth Yalavarthi }
232f6661e6dSSrikanth Yalavarthi
233f6661e6dSSrikanth Yalavarthi if (strcmp(testname, "model_ops") == 0) {
23477fefa0aSSrikanth Yalavarthi printf("\t\t--models : comma separated list of models\n"
23577fefa0aSSrikanth Yalavarthi "\t\t--stats : enable reporting device statistics\n");
236f6661e6dSSrikanth Yalavarthi printf("\n");
237f6661e6dSSrikanth Yalavarthi }
238bbd272edSSrikanth Yalavarthi
23988be513bSSrikanth Yalavarthi if ((strcmp(testname, "inference_ordered") == 0) ||
24088be513bSSrikanth Yalavarthi (strcmp(testname, "inference_interleave") == 0)) {
241da679339SSrikanth Yalavarthi printf("\t\t--filelist : comma separated list of model, input, output and reference\n"
24239890f07SSrikanth Yalavarthi "\t\t--repetitions : number of inference repetitions\n"
243c0e87165SSrikanth Yalavarthi "\t\t--burst_size : inference burst size\n"
244c0e87165SSrikanth Yalavarthi "\t\t--queue_pairs : number of queue pairs to create\n"
2455d41169bSSrikanth Yalavarthi "\t\t--queue_size : size of queue-pair\n"
2465a82bc33SSrikanth Yalavarthi "\t\t--tolerance : maximum tolerance (%%) for output validation\n"
247671e9c20SAnup Prabhu "\t\t--stats : enable reporting device and model statistics\n"
248671e9c20SAnup Prabhu "\t\t--quantized_io : skip input/output quantization\n");
249bbd272edSSrikanth Yalavarthi printf("\n");
250bbd272edSSrikanth Yalavarthi }
251ac930a55SSrikanth Yalavarthi }
252ac930a55SSrikanth Yalavarthi
253ac930a55SSrikanth Yalavarthi static void
print_usage(char * program)254ac930a55SSrikanth Yalavarthi print_usage(char *program)
255ac930a55SSrikanth Yalavarthi {
256ac930a55SSrikanth Yalavarthi printf("\nusage : %s [EAL options] -- [application options]\n", program);
257ac930a55SSrikanth Yalavarthi printf("application options:\n");
258ac930a55SSrikanth Yalavarthi printf("\t--test : name of the test application to run\n"
259ac930a55SSrikanth Yalavarthi "\t--dev_id : device id of the ML device\n"
260ac930a55SSrikanth Yalavarthi "\t--socket_id : socket_id of application resources\n"
261ac930a55SSrikanth Yalavarthi "\t--debug : enable debug mode\n"
262ac930a55SSrikanth Yalavarthi "\t--help : print help\n");
263ac930a55SSrikanth Yalavarthi printf("\n");
264ac930a55SSrikanth Yalavarthi printf("available tests and test specific application options:\n");
265ac930a55SSrikanth Yalavarthi ml_test_dump_names(ml_dump_test_options);
266ac930a55SSrikanth Yalavarthi }
267ac930a55SSrikanth Yalavarthi
268ac930a55SSrikanth Yalavarthi static struct option lgopts[] = {
269ac930a55SSrikanth Yalavarthi {ML_TEST, 1, 0, 0},
270ac930a55SSrikanth Yalavarthi {ML_DEVICE_ID, 1, 0, 0},
271ac930a55SSrikanth Yalavarthi {ML_SOCKET_ID, 1, 0, 0},
272f6661e6dSSrikanth Yalavarthi {ML_MODELS, 1, 0, 0},
273bbd272edSSrikanth Yalavarthi {ML_FILELIST, 1, 0, 0},
274671e9c20SAnup Prabhu {ML_QUANTIZED_IO, 0, 0, 0},
275bbd272edSSrikanth Yalavarthi {ML_REPETITIONS, 1, 0, 0},
27639890f07SSrikanth Yalavarthi {ML_BURST_SIZE, 1, 0, 0},
277c0e87165SSrikanth Yalavarthi {ML_QUEUE_PAIRS, 1, 0, 0},
278c0e87165SSrikanth Yalavarthi {ML_QUEUE_SIZE, 1, 0, 0},
279da679339SSrikanth Yalavarthi {ML_TOLERANCE, 1, 0, 0},
2805a82bc33SSrikanth Yalavarthi {ML_STATS, 0, 0, 0},
281ac930a55SSrikanth Yalavarthi {ML_DEBUG, 0, 0, 0},
282ac930a55SSrikanth Yalavarthi {ML_HELP, 0, 0, 0},
283ac930a55SSrikanth Yalavarthi {NULL, 0, 0, 0}};
284ac930a55SSrikanth Yalavarthi
285ac930a55SSrikanth Yalavarthi static int
ml_opts_parse_long(int opt_idx,struct ml_options * opt)286ac930a55SSrikanth Yalavarthi ml_opts_parse_long(int opt_idx, struct ml_options *opt)
287ac930a55SSrikanth Yalavarthi {
288ac930a55SSrikanth Yalavarthi unsigned int i;
289ac930a55SSrikanth Yalavarthi
290ac930a55SSrikanth Yalavarthi struct long_opt_parser parsermap[] = {
291ac930a55SSrikanth Yalavarthi {ML_TEST, ml_parse_test_name},
292ac930a55SSrikanth Yalavarthi {ML_DEVICE_ID, ml_parse_dev_id},
293ac930a55SSrikanth Yalavarthi {ML_SOCKET_ID, ml_parse_socket_id},
294f6661e6dSSrikanth Yalavarthi {ML_MODELS, ml_parse_models},
295bbd272edSSrikanth Yalavarthi {ML_FILELIST, ml_parse_filelist},
296bbd272edSSrikanth Yalavarthi {ML_REPETITIONS, ml_parse_repetitions},
29739890f07SSrikanth Yalavarthi {ML_BURST_SIZE, ml_parse_burst_size},
298c0e87165SSrikanth Yalavarthi {ML_QUEUE_PAIRS, ml_parse_queue_pairs},
299c0e87165SSrikanth Yalavarthi {ML_QUEUE_SIZE, ml_parse_queue_size},
300da679339SSrikanth Yalavarthi {ML_TOLERANCE, ml_parse_tolerance},
301ac930a55SSrikanth Yalavarthi };
302ac930a55SSrikanth Yalavarthi
303ac930a55SSrikanth Yalavarthi for (i = 0; i < RTE_DIM(parsermap); i++) {
304ac930a55SSrikanth Yalavarthi if (strncmp(lgopts[opt_idx].name, parsermap[i].lgopt_name,
305ac930a55SSrikanth Yalavarthi strlen(lgopts[opt_idx].name)) == 0)
306ac930a55SSrikanth Yalavarthi return parsermap[i].parser_fn(opt, optarg);
307ac930a55SSrikanth Yalavarthi }
308ac930a55SSrikanth Yalavarthi
309ac930a55SSrikanth Yalavarthi return -EINVAL;
310ac930a55SSrikanth Yalavarthi }
311ac930a55SSrikanth Yalavarthi
312ac930a55SSrikanth Yalavarthi int
ml_options_parse(struct ml_options * opt,int argc,char ** argv)313ac930a55SSrikanth Yalavarthi ml_options_parse(struct ml_options *opt, int argc, char **argv)
314ac930a55SSrikanth Yalavarthi {
315ac930a55SSrikanth Yalavarthi int opt_idx;
316ac930a55SSrikanth Yalavarthi int retval;
317ac930a55SSrikanth Yalavarthi int opts;
318ac930a55SSrikanth Yalavarthi
319ac930a55SSrikanth Yalavarthi while ((opts = getopt_long(argc, argv, "", lgopts, &opt_idx)) != EOF) {
320ac930a55SSrikanth Yalavarthi switch (opts) {
321ac930a55SSrikanth Yalavarthi case 0: /* parse long options */
322671e9c20SAnup Prabhu if (!strcmp(lgopts[opt_idx].name, "quantized_io")) {
323671e9c20SAnup Prabhu opt->quantized_io = true;
324671e9c20SAnup Prabhu break;
325671e9c20SAnup Prabhu }
326671e9c20SAnup Prabhu
3275a82bc33SSrikanth Yalavarthi if (!strcmp(lgopts[opt_idx].name, "stats")) {
3285a82bc33SSrikanth Yalavarthi opt->stats = true;
3295a82bc33SSrikanth Yalavarthi break;
3305a82bc33SSrikanth Yalavarthi }
3315a82bc33SSrikanth Yalavarthi
332ac930a55SSrikanth Yalavarthi if (!strcmp(lgopts[opt_idx].name, "debug")) {
333ac930a55SSrikanth Yalavarthi opt->debug = true;
334ac930a55SSrikanth Yalavarthi break;
335ac930a55SSrikanth Yalavarthi }
336ac930a55SSrikanth Yalavarthi
337ac930a55SSrikanth Yalavarthi if (!strcmp(lgopts[opt_idx].name, "help")) {
338ac930a55SSrikanth Yalavarthi print_usage(argv[0]);
339ac930a55SSrikanth Yalavarthi exit(EXIT_SUCCESS);
340ac930a55SSrikanth Yalavarthi }
341ac930a55SSrikanth Yalavarthi
342ac930a55SSrikanth Yalavarthi retval = ml_opts_parse_long(opt_idx, opt);
343ac930a55SSrikanth Yalavarthi if (retval != 0)
344ac930a55SSrikanth Yalavarthi return retval;
345ac930a55SSrikanth Yalavarthi break;
346ac930a55SSrikanth Yalavarthi default:
347ac930a55SSrikanth Yalavarthi return -EINVAL;
348ac930a55SSrikanth Yalavarthi }
349ac930a55SSrikanth Yalavarthi }
350ac930a55SSrikanth Yalavarthi
351ac930a55SSrikanth Yalavarthi return 0;
352ac930a55SSrikanth Yalavarthi }
353ac930a55SSrikanth Yalavarthi
354ac930a55SSrikanth Yalavarthi void
ml_options_dump(struct ml_options * opt)355ac930a55SSrikanth Yalavarthi ml_options_dump(struct ml_options *opt)
356ac930a55SSrikanth Yalavarthi {
357ac930a55SSrikanth Yalavarthi struct rte_ml_dev_info dev_info;
358ac930a55SSrikanth Yalavarthi
359ac930a55SSrikanth Yalavarthi rte_ml_dev_info_get(opt->dev_id, &dev_info);
360ac930a55SSrikanth Yalavarthi
361ac930a55SSrikanth Yalavarthi ml_dump("driver", "%s", dev_info.driver_name);
362ac930a55SSrikanth Yalavarthi ml_dump("test", "%s", opt->test_name);
363ac930a55SSrikanth Yalavarthi ml_dump("dev_id", "%d", opt->dev_id);
364ac930a55SSrikanth Yalavarthi
365ac930a55SSrikanth Yalavarthi if (opt->socket_id == SOCKET_ID_ANY)
366ac930a55SSrikanth Yalavarthi ml_dump("socket_id", "%d (SOCKET_ID_ANY)", opt->socket_id);
367ac930a55SSrikanth Yalavarthi else
368ac930a55SSrikanth Yalavarthi ml_dump("socket_id", "%d", opt->socket_id);
369ac930a55SSrikanth Yalavarthi
370ac930a55SSrikanth Yalavarthi ml_dump("debug", "%s", (opt->debug ? "true" : "false"));
371671e9c20SAnup Prabhu ml_dump("quantized_io", "%s", (opt->quantized_io ? "true" : "false"));
372ac930a55SSrikanth Yalavarthi }
373