diff options
Diffstat (limited to 'reports.c')
-rw-r--r-- | reports.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/reports.c b/reports.c new file mode 100644 index 0000000..7ce139b --- /dev/null +++ b/reports.c @@ -0,0 +1,73 @@ +/* + * reports.c + * + * Copyright (C) 2014, Linaro Limited. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Contributors: + * Tuukka Tikkanen <tuukka.tikkanen@linaro.org> + * + */ + +#include "report_ops.h" +#include "utils.h" +#include <stdio.h> +#include <string.h> +#include <assert.h> + +void list_report_formats_to_stderr(void) +{ + const struct report_ops **ops_it; + + for (ops_it = (&report_ops_head)+1 ; *ops_it ; ++ops_it) + fprintf(stderr, " %s", (*ops_it)->name); + + fprintf(stderr, "\n"); +} + +struct report_ops *get_report_ops(const char *name) +{ + const struct report_ops **ops_it; + + for (ops_it = (&report_ops_head)+1 ; *ops_it ; ++ops_it) { + /* All formats must export all of the asserted ops */ + assert((*ops_it)->name); + assert((*ops_it)->check_output); + assert((*ops_it)->open_report_file); + assert((*ops_it)->close_report_file); + assert((*ops_it)->cstate_table_header); + assert((*ops_it)->cstate_table_footer); + assert((*ops_it)->cstate_cpu_header); + assert((*ops_it)->cstate_single_state); + assert((*ops_it)->cstate_end_cpu); + assert((*ops_it)->pstate_table_header); + assert((*ops_it)->pstate_table_footer); + assert((*ops_it)->pstate_cpu_header); + assert((*ops_it)->pstate_single_state); + assert((*ops_it)->pstate_end_cpu); + assert((*ops_it)->wakeup_table_header); + assert((*ops_it)->wakeup_table_footer); + assert((*ops_it)->wakeup_cpu_header); + assert((*ops_it)->wakeup_single_state); + assert((*ops_it)->wakeup_end_cpu); + /* Compare name */ + if (!strcmp((*ops_it)->name, name)) + return (struct report_ops *)*ops_it; + } + return NULL; +} |