/**
* @file op_x86_model.h
* interface to x86 model-specific MSR operations
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author Graydon Hoare
*/
#ifndef OP_X86_MODEL_H
#define OP_X86_MODEL_H
#include "oprofile.h"
struct op_saved_msr {
uint high;
uint low;
};
struct op_msr_group {
uint * addrs;
struct op_saved_msr * saved;
};
struct op_msrs {
struct op_msr_group counters;
struct op_msr_group controls;
};
struct pt_regs;
struct op_x86_model_spec {
uint const num_counters;
uint const num_controls;
void (*fill_in_addresses)(struct op_msrs * const msrs);
void (*setup_ctrs)(struct op_msrs const * const msrs);
void (*check_ctrs)(uint const cpu,
struct op_msrs const * const msrs,
struct pt_regs * const regs);
void (*start)(struct op_msrs const * const msrs);
void (*stop)(struct op_msrs const * const msrs);
};
extern struct op_x86_model_spec const op_ppro_spec;
extern struct op_x86_model_spec const op_athlon_spec;
extern struct op_x86_model_spec const op_p4_spec;
#ifdef HT_SUPPORT
extern struct op_x86_model_spec const op_p4_ht2_spec;
#endif
#endif /* OP_X86_MODEL_H */