15a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
25a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @file opd_extended.h
35a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended Feature
45a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng *
55a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Copyright 2007-2009 OProfile authors
65a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Read the file COPYING
75a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng *
85a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
95a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Copyright (c) 2009 Advanced Micro Devices, Inc.
105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#ifndef OPD_EXTENDED_H
135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#define OPD_EXTENDED_H
145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_trans.h"
165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "odb.h"
175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdlib.h>
195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdint.h>
205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended Feature Table Entry
245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengstruct opd_ext_feature {
265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	// Feature name
275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	const char* feature;
285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	// Feature handlers
295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	struct opd_ext_handlers * handlers;
305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng};
315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended handlers
345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengstruct opd_ext_handlers {
365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	// Extended init
375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	int (*ext_init)(char const *);
387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown	// Extended deinit
397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown	int (*ext_deinit)();
405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	// Extended statistics
415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	int (*ext_print_stats)();
425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	// Extended sfile handlers
435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	struct opd_ext_sfile_handlers * ext_sfile;
445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng};
455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * OProfile Extended sub-handlers (sfile)
485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengstruct opd_ext_sfile_handlers {
505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	int (*create)(struct sfile *);
515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	int (*dup)(struct sfile *, struct sfile *);
525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	int (*close)(struct sfile *);
535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	int (*sync)(struct sfile *);
545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	odb_t * (*get)(struct transient const *, int);
555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	struct opd_event * (*find_counter_event)(unsigned long);
565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng};
575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @param value: commandline input option string
605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng *
615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Parse the specified extended feature
625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern int opd_ext_initialize(char const * value);
645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * @param value: commandline input option string
677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown *
687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * Deinitialize
697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown */
707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownextern int opd_ext_deinitialize();
717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown
727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown/**
735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Print out extended feature statistics in oprofiled.log file
745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_print_stats();
765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * opd_sfile extended sfile handling functions
795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_create(struct sfile * sf);
815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_dup (struct sfile * to, struct sfile * from);
825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_close(struct sfile * sf);
835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern void opd_ext_sfile_sync(struct sfile * sf);
845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern odb_t * opd_ext_sfile_get(struct transient const * trans, int is_cg);
855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @param counter: counter index
885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng *
895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Get event struct opd_event from the counter index value.
905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengextern struct opd_event * opd_ext_find_counter_event(unsigned long counter);
925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#endif
95