| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@kernel.org> |
| */ |
| |
| #include <getopt.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdio.h> |
| |
| #include "osnoise.h" |
| #include "timerlat.h" |
| |
| /* |
| * rtla_usage - print rtla usage |
| */ |
| static void rtla_usage(int err) |
| { |
| int i; |
| |
| static const char *msg[] = { |
| "", |
| "rtla version " VERSION, |
| "", |
| " usage: rtla COMMAND ...", |
| "", |
| " commands:", |
| " osnoise - gives information about the operating system noise (osnoise)", |
| " hwnoise - gives information about hardware-related noise", |
| " timerlat - measures the timer irq and thread latency", |
| "", |
| NULL, |
| }; |
| |
| for (i = 0; msg[i]; i++) |
| fprintf(stderr, "%s\n", msg[i]); |
| exit(err); |
| } |
| |
| /* |
| * run_command - try to run a rtla tool command |
| * |
| * It returns 0 if it fails. The tool's main will generally not |
| * return as they should call exit(). |
| */ |
| int run_command(int argc, char **argv, int start_position) |
| { |
| if (strcmp(argv[start_position], "osnoise") == 0) { |
| osnoise_main(argc-start_position, &argv[start_position]); |
| goto ran; |
| } else if (strcmp(argv[start_position], "hwnoise") == 0) { |
| hwnoise_main(argc-start_position, &argv[start_position]); |
| goto ran; |
| } else if (strcmp(argv[start_position], "timerlat") == 0) { |
| timerlat_main(argc-start_position, &argv[start_position]); |
| goto ran; |
| } |
| |
| return 0; |
| ran: |
| return 1; |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| int retval; |
| |
| /* is it an alias? */ |
| retval = run_command(argc, argv, 0); |
| if (retval) |
| exit(0); |
| |
| if (argc < 2) |
| goto usage; |
| |
| if (strcmp(argv[1], "-h") == 0) { |
| rtla_usage(0); |
| } else if (strcmp(argv[1], "--help") == 0) { |
| rtla_usage(0); |
| } |
| |
| retval = run_command(argc, argv, 1); |
| if (retval) |
| exit(0); |
| |
| usage: |
| rtla_usage(1); |
| exit(1); |
| } |