static inline int print_all_triggers(struct cli_state *state) { int status; status = print_trigger(state, BLADERF_MODULE_RX, BLADERF_TRIGGER_J71_4); if (status != 0) { return status; } status = print_trigger(state, BLADERF_MODULE_TX, BLADERF_TRIGGER_J71_4); return status; }
int cmd_trigger(struct cli_state *state, int argc, char **argv) { int status = 0; bladerf_module m; bladerf_trigger_signal s; switch (argc) { case 1: status = print_all_triggers(state); break; case 3: case 4: s = str2trigger(argv[1]); if (s == BLADERF_TRIGGER_INVALID) { cli_err(state, "Invalid trigger signal", "%s\n", argv[1]); return CLI_RET_INVPARAM; } m = str2module(argv[2]); if (m == BLADERF_MODULE_INVALID) { cli_err(state, "Invalid module", "%s\n", argv[2]); return CLI_RET_INVPARAM; } if (argc == 3) { status = print_trigger(state, m, s); } else { status = config_trigger(state, m, s, argv[3], argv[0]); } break; default: status = CLI_RET_NARGS; } return status; }
int __noinstrument kfi_dump_log(char* buf) { int i, len = 0; struct kfi_run* run = run_curr; struct kfi_filters* filters = &run->filters; if (!run) { dump_str(buf, len, "\nNo logging run registered\n"); return len; } if (!run->triggered) { dump_str(buf, len, "\nLogging not yet triggered\n"); return len; } if (!run->complete) { dump_str(buf, len, "\nLogging is running\n"); return len; } dump_str(buf, len, "\nKernel Instrumentation Run ID %d\n\n", run->id); dump_str(buf, len, "Filters:\n"); if (filters->func_list_size) { dump_str(buf, len, "\t%d-entry function list\n", filters->func_list_size); } if (filters->min_delta) { dump_str(buf, len, "\t%ld usecs minimum execution time\n", filters->min_delta); } if (filters->max_delta) { dump_str(buf, len, "\t%ld usecs maximum execution time\n", filters->max_delta); } if (filters->no_ints) { dump_str(buf, len, "\tno functions in interrupt context\n"); } if (filters->only_ints) { dump_str(buf, len, "\tno functions NOT in interrupt context\n"); } if (filters->func_list) { dump_str(buf, len, "\tfunction list\n"); } #ifdef KFI_DEBUG dump_str(buf, len, "\nFilter Counters:\n"); if (filters->min_delta || filters->max_delta) { dump_str(buf, len, "\nExecution time filter count = %d\n", filters->cnt.delta); } if (filters->no_ints) { dump_str(buf, len, "No Interrupt functions filter count = %d\n", filters->cnt.no_ints); } if (filters->only_ints) { dump_str(buf, len, "Only Interrupt functions filter count = %d\n", filters->cnt.only_ints); } if (filters->func_list_size) { dump_str(buf, len, "Function List filter count = %d\n", filters->cnt.func_list); } dump_str(buf, len, "Total entries filtered = %d\n", filters->cnt.delta + filters->cnt.no_ints + filters->cnt.only_ints + filters->cnt.func_list); dump_str(buf, len, "Entries not found = %d\n", run->notfound); #endif dump_str(buf, len, "\nNumber of entries after filters = %d\n\n", run->next_entry); len += print_trigger(buf, len, &run->start_trigger, 1); len += print_trigger(buf, len, &run->stop_trigger, 0); /* print out header */ dump_str(buf, len, "\n"); dump_str(buf, len, " Entry Delta PID Function Caller\n"); dump_str(buf, len, "-------- -------- -------- -------- --------\n"); for (i=0; i < run->next_entry; i++) { dump_str(buf, len, "%8lu %8lu %7d%s %08x %08x\n", run->log[i].time, run->log[i].delta, run->log[i].pid, (run->log[i].pid == INTR_CONTEXT) ? "i" : " ", (unsigned int)run->log[i].va, (unsigned int)run->log[i].call_site); } return len; }