/** VILLASfpga utility for tests and benchmarks * * @author Steffen Vogel * @copyright 2017, Steffen Vogel **********************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" /* Declarations */ int fpga_benchmarks(int argc, char *argv[], struct fpga_card *c); struct cfg cfg; void usage(char *name) { printf("Usage: %s CONFIGFILE CARD CMD [OPTIONS]\n", name); printf(" Commands:\n"); printf(" benchmarks Do benchmarks\n\n"); printf(" Options:\n"); printf(" -d Set log level\n\n"); print_copyright(); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int ret; struct fpga_card *card; enum { FPGA_BENCH } subcommand; if (argc < 4) usage(argv[0]); if (strcmp(argv[2], "benchmarks") == 0) subcommand = FPGA_BENCH; else usage(argv[0]); /* Parse arguments */ char c, *endptr; while ((c = getopt(argc-1, argv+1, "d:")) != -1) { switch (c) { case 'd': cfg.log.level = strtoul(optarg, &endptr, 10); break; case '?': default: usage(argv[0]); } } info("Parsing configuration"); cfg_parse(&cfg, argv[1]); info("Initialize real-time system"); rt_init(&cfg); /* Initialize VILLASfpga card */ ret = fpga_init(argc, argv, config_root_setting(cfg.cfg)); if (ret) error("Failed to initialize FPGA card"); card = fpga_lookup_card(argv[2]); if (!card) error("FPGA card '%s' does not exist", argv[2]); fpga_card_dump(card); /* Start subcommand */ switch (subcommand) { case FPGA_BENCH: fpga_benchmarks(argc-optind-1, argv+optind+1, card); break; } /* Shutdown */ ret = fpga_deinit(); if (ret) error("Failed to de-initialize FPGA card"); cfg_destroy(&cfg); return 0; }