1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@kernel.org> 4 */ 5 6 #include <getopt.h> 7 #include <stdlib.h> 8 #include <string.h> 9 #include <stdio.h> 10 11 #include "osnoise.h" 12 #include "timerlat.h" 13 14 /* 15 * rtla_usage - print rtla usage 16 */ 17 static void rtla_usage(int err) 18 { 19 int i; 20 21 static const char *msg[] = { 22 "", 23 "rtla version " VERSION, 24 "", 25 " usage: rtla COMMAND ...", 26 "", 27 " commands:", 28 " osnoise - gives information about the operating system noise (osnoise)", 29 " hwnoise - gives information about hardware-related noise", 30 " timerlat - measures the timer irq and thread latency", 31 "", 32 NULL, 33 }; 34 35 for (i = 0; msg[i]; i++) 36 fprintf(stderr, "%s\n", msg[i]); 37 exit(err); 38 } 39 40 /* 41 * run_command - try to run a rtla tool command 42 * 43 * It returns 0 if it fails. The tool's main will generally not 44 * return as they should call exit(). 45 */ 46 int run_command(int argc, char **argv, int start_position) 47 { 48 if (strcmp(argv[start_position], "osnoise") == 0) { 49 osnoise_main(argc-start_position, &argv[start_position]); 50 goto ran; 51 } else if (strcmp(argv[start_position], "hwnoise") == 0) { 52 hwnoise_main(argc-start_position, &argv[start_position]); 53 goto ran; 54 } else if (strcmp(argv[start_position], "timerlat") == 0) { 55 timerlat_main(argc-start_position, &argv[start_position]); 56 goto ran; 57 } 58 59 return 0; 60 ran: 61 return 1; 62 } 63 64 int main(int argc, char *argv[]) 65 { 66 int retval; 67 68 /* is it an alias? */ 69 retval = run_command(argc, argv, 0); 70 if (retval) 71 exit(0); 72 73 if (argc < 2) 74 goto usage; 75 76 if (strcmp(argv[1], "-h") == 0) { 77 rtla_usage(0); 78 } else if (strcmp(argv[1], "--help") == 0) { 79 rtla_usage(0); 80 } 81 82 retval = run_command(argc, argv, 1); 83 if (retval) 84 exit(0); 85 86 usage: 87 rtla_usage(1); 88 exit(1); 89 } 90