2005-04-17 02:20:36 +04:00
/**
* @ 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
struct op_saved_msr {
unsigned int high ;
unsigned int low ;
} ;
struct op_msr {
unsigned long addr ;
struct op_saved_msr saved ;
} ;
struct op_msrs {
2008-09-05 19:12:36 +04:00
struct op_msr * counters ;
struct op_msr * controls ;
2005-04-17 02:20:36 +04:00
} ;
struct pt_regs ;
/* The model vtable abstracts the differences between
2007-10-20 03:13:56 +04:00
* various x86 CPU models ' perfctr support .
2005-04-17 02:20:36 +04:00
*/
struct op_x86_model_spec {
2008-07-22 23:08:48 +04:00
int ( * init ) ( struct oprofile_operations * ops ) ;
void ( * exit ) ( void ) ;
2008-08-18 16:49:47 +04:00
unsigned int num_counters ;
unsigned int num_controls ;
2005-04-17 02:20:36 +04:00
void ( * fill_in_addresses ) ( struct op_msrs * const msrs ) ;
void ( * setup_ctrs ) ( struct op_msrs const * const msrs ) ;
int ( * check_ctrs ) ( struct pt_regs * const regs ,
struct op_msrs const * const msrs ) ;
void ( * start ) ( struct op_msrs const * const msrs ) ;
void ( * stop ) ( struct op_msrs const * const msrs ) ;
2006-09-26 12:52:26 +04:00
void ( * shutdown ) ( struct op_msrs const * const msrs ) ;
2005-04-17 02:20:36 +04:00
} ;
2009-05-14 19:10:52 +04:00
extern struct op_x86_model_spec const op_ppro_spec ;
2005-04-17 02:20:36 +04:00
extern struct op_x86_model_spec const op_p4_spec ;
extern struct op_x86_model_spec const op_p4_ht2_spec ;
2008-07-22 23:08:50 +04:00
extern struct op_x86_model_spec const op_amd_spec ;
2008-08-18 16:50:31 +04:00
extern struct op_x86_model_spec op_arch_perfmon_spec ;
2005-04-17 02:20:36 +04:00
# endif /* OP_X86_MODEL_H */