blob: 67fc0a534aef86eda2a1edc9e1bcf076c824b4d9 [file] [log] [blame]
Ben Cheng5a4eb4e2009-09-14 16:00:41 -07001/**
2 * @file op_xml_events.c
3 * routines for generating event files in XML
4 *
5 * @remark Copyright 2008 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author Dave Nomura
9 */
10
11#include <stdio.h>
12#include <string.h>
13#include "op_events.h"
14#include "op_list.h"
15#include "op_cpu_type.h"
16#include "op_xml_out.h"
17
18static op_cpu cpu_type;
Ben Cheng5bbbe462010-09-02 21:48:01 -070019#define MAX_BUFFER 16384
20static char buffer[MAX_BUFFER];
21
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070022void open_xml_events(char const * title, char const * doc, op_cpu the_cpu_type)
23{
24 char const * schema_version = "1.0";
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070025
26 buffer[0] = '\0';
27 cpu_type = the_cpu_type;
Ben Cheng5bbbe462010-09-02 21:48:01 -070028 open_xml_element(HELP_EVENTS, 0, buffer, MAX_BUFFER);
29 open_xml_element(HELP_HEADER, 1, buffer, MAX_BUFFER);
30 init_xml_str_attr(HELP_TITLE, title, buffer, MAX_BUFFER);
31 init_xml_str_attr(SCHEMA_VERSION, schema_version, buffer, MAX_BUFFER);
32 init_xml_str_attr(HELP_DOC, doc, buffer, MAX_BUFFER);
33 close_xml_element(NONE, 0, buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070034 printf("%s", buffer);
35}
36
37void close_xml_events(void)
38{
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070039 buffer[0] = '\0';
Ben Cheng5bbbe462010-09-02 21:48:01 -070040 close_xml_element(HELP_EVENTS, 0, buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070041 printf("%s", buffer);
42}
43
Ben Cheng5bbbe462010-09-02 21:48:01 -070044static void xml_do_arch_specific_event_help(struct op_event const *event,
45 char *buffer, size_t size)
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070046{
47 switch (cpu_type) {
48 case CPU_PPC64_CELL:
Ben Cheng5bbbe462010-09-02 21:48:01 -070049 init_xml_int_attr(HELP_EVENT_GROUP, event->val / 100, buffer,
50 size);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070051 break;
52 default:
53 break;
54 }
55}
56
57
58void xml_help_for_event(struct op_event const * event)
59{
60 uint i;
61 int nr_counters;
62 int has_nested = strcmp(event->unit->name, "zero");
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070063
64 buffer[0] = '\0';
Ben Cheng5bbbe462010-09-02 21:48:01 -070065 open_xml_element(HELP_EVENT, 1, buffer, MAX_BUFFER);
66 init_xml_str_attr(HELP_EVENT_NAME, event->name, buffer, MAX_BUFFER);
67 xml_do_arch_specific_event_help(event, buffer, MAX_BUFFER);
68 init_xml_str_attr(HELP_EVENT_DESC, event->desc, buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070069
70 nr_counters = op_get_nr_counters(cpu_type);
Ben Cheng5bbbe462010-09-02 21:48:01 -070071 init_xml_int_attr(HELP_COUNTER_MASK, event->counter_mask, buffer,
72 MAX_BUFFER);
73 if (event->ext)
74 init_xml_str_attr(HELP_EXT, event->ext, buffer, MAX_BUFFER);
75 init_xml_int_attr(HELP_MIN_COUNT, event->min_count,
76 buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070077
78 if (has_nested) {
Ben Cheng5bbbe462010-09-02 21:48:01 -070079 close_xml_element(NONE, 1, buffer, MAX_BUFFER);
80 open_xml_element(HELP_UNIT_MASKS, 1, buffer, MAX_BUFFER);
81 init_xml_int_attr(HELP_DEFAULT_MASK, event->unit->default_mask,
82 buffer, MAX_BUFFER);
83 close_xml_element(NONE, 1, buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070084 for (i = 0; i < event->unit->num; i++) {
Ben Cheng5bbbe462010-09-02 21:48:01 -070085 open_xml_element(HELP_UNIT_MASK, 1, buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070086 init_xml_int_attr(HELP_UNIT_MASK_VALUE,
Ben Cheng5bbbe462010-09-02 21:48:01 -070087 event->unit->um[i].value,
88 buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070089 init_xml_str_attr(HELP_UNIT_MASK_DESC,
Ben Cheng5bbbe462010-09-02 21:48:01 -070090 event->unit->um[i].desc,
91 buffer, MAX_BUFFER);
92 close_xml_element(NONE, 0, buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070093 }
Ben Cheng5bbbe462010-09-02 21:48:01 -070094 close_xml_element(HELP_UNIT_MASKS, 0, buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070095 }
Ben Cheng5bbbe462010-09-02 21:48:01 -070096 close_xml_element(has_nested ? HELP_EVENT : NONE, has_nested,
97 buffer, MAX_BUFFER);
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070098 printf("%s", buffer);
99}
100