1/**
2 * @file opd_extended.h
3 * OProfile Extended Feature
4 *
5 * @remark Copyright 2007-2009 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
9 * Copyright (c) 2009 Advanced Micro Devices, Inc.
10 */
11
12#ifndef OPD_EXTENDED_H
13#define OPD_EXTENDED_H
14
15#include "opd_trans.h"
16#include "odb.h"
17
18#include <stdlib.h>
19#include <stdint.h>
20
21
22/**
23 * OProfile Extended Feature Table Entry
24 */
25struct opd_ext_feature {
26	// Feature name
27	const char* feature;
28	// Feature handlers
29	struct opd_ext_handlers * handlers;
30};
31
32/**
33 * OProfile Extended handlers
34 */
35struct opd_ext_handlers {
36	// Extended init
37	int (*ext_init)(char const *);
38	// Extended deinit
39	int (*ext_deinit)();
40	// Extended statistics
41	int (*ext_print_stats)();
42	// Extended sfile handlers
43	struct opd_ext_sfile_handlers * ext_sfile;
44};
45
46/**
47 * OProfile Extended sub-handlers (sfile)
48 */
49struct opd_ext_sfile_handlers {
50	int (*create)(struct sfile *);
51	int (*dup)(struct sfile *, struct sfile *);
52	int (*close)(struct sfile *);
53	int (*sync)(struct sfile *);
54	odb_t * (*get)(struct transient const *, int);
55	struct opd_event * (*find_counter_event)(unsigned long);
56};
57
58/**
59 * @param value: commandline input option string
60 *
61 * Parse the specified extended feature
62 */
63extern int opd_ext_initialize(char const * value);
64
65/**
66 * @param value: commandline input option string
67 *
68 * Deinitialize
69 */
70extern int opd_ext_deinitialize();
71
72/**
73 * Print out extended feature statistics in oprofiled.log file
74 */
75extern void opd_ext_print_stats();
76
77/**
78 * opd_sfile extended sfile handling functions
79 */
80extern void opd_ext_sfile_create(struct sfile * sf);
81extern void opd_ext_sfile_dup (struct sfile * to, struct sfile * from);
82extern void opd_ext_sfile_close(struct sfile * sf);
83extern void opd_ext_sfile_sync(struct sfile * sf);
84extern odb_t * opd_ext_sfile_get(struct transient const * trans, int is_cg);
85
86/**
87 * @param counter: counter index
88 *
89 * Get event struct opd_event from the counter index value.
90 */
91extern struct opd_event * opd_ext_find_counter_event(unsigned long counter);
92
93
94#endif
95