^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * @file arch/alpha/oprofile/op_impl.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * @remark Copyright 2002 OProfile authors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * @remark Read the file COPYING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * @author Richard Henderson <rth@twiddle.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef OP_IMPL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define OP_IMPL_H 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) /* Per-counter configuration as set via oprofilefs. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) struct op_counter_config {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) unsigned long enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) unsigned long event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) unsigned long count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /* Dummies because I am too lazy to hack the userspace tools. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) unsigned long kernel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) unsigned long user;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) unsigned long unit_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /* System-wide configuration as set via oprofilefs. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct op_system_config {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) unsigned long enable_pal;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) unsigned long enable_kernel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) unsigned long enable_user;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) /* Cached values for the various performance monitoring registers. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) struct op_register_config {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) unsigned long enable;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) unsigned long mux_select;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) unsigned long proc_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) unsigned long freq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) unsigned long reset_values;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) unsigned long need_reset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) /* Per-architecture configuration and hooks. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct op_axp_model {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) void (*reg_setup) (struct op_register_config *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) struct op_counter_config *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) struct op_system_config *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) void (*cpu_setup) (void *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) void (*reset_ctr) (struct op_register_config *, unsigned long);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) void (*handle_interrupt) (unsigned long, struct pt_regs *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct op_counter_config *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) char *cpu_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) unsigned char num_counters;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) unsigned char can_set_proc_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #endif