#ifndef _CORESIGHT_ETM_PERF_H
#define _CORESIGHT_ETM_PERF_H
#include <linux/percpu-defs.h>
#include "coresight-priv.h"
struct coresight_device;
struct cscfg_config_desc;
#define ETM_ADDR_CMP_MAX 8
#define ATTR_CFG_FLD_preset_CFG config
#define ATTR_CFG_FLD_preset_LO 0
#define ATTR_CFG_FLD_preset_HI 3
#define ATTR_CFG_FLD_timestamp_CFG config
#define ATTR_CFG_FLD_timestamp_LO 4
#define ATTR_CFG_FLD_timestamp_HI 7
#define ATTR_CFG_FLD_branch_broadcast_CFG config
#define ATTR_CFG_FLD_branch_broadcast_LO 8
#define ATTR_CFG_FLD_branch_broadcast_HI 8
#define ATTR_CFG_FLD_cycacc_CFG config
#define ATTR_CFG_FLD_cycacc_LO 12
#define ATTR_CFG_FLD_cycacc_HI 12
#define ATTR_CFG_FLD_contextid1_CFG config
#define ATTR_CFG_FLD_contextid1_LO 14
#define ATTR_CFG_FLD_contextid1_HI 14
#define ATTR_CFG_FLD_contextid2_CFG config
#define ATTR_CFG_FLD_contextid2_LO 15
#define ATTR_CFG_FLD_contextid2_HI 15
#define ATTR_CFG_FLD_deprecated_timestamp_CFG config
#define ATTR_CFG_FLD_deprecated_timestamp_LO 28
#define ATTR_CFG_FLD_deprecated_timestamp_HI 28
#define ATTR_CFG_FLD_retstack_CFG config
#define ATTR_CFG_FLD_retstack_LO 29
#define ATTR_CFG_FLD_retstack_HI 29
#define ATTR_CFG_FLD_sinkid_CFG config2
#define ATTR_CFG_FLD_sinkid_LO 0
#define ATTR_CFG_FLD_sinkid_HI 31
#define ATTR_CFG_FLD_configid_CFG config2
#define ATTR_CFG_FLD_configid_LO 32
#define ATTR_CFG_FLD_configid_HI 63
#define ATTR_CFG_FLD_cc_threshold_CFG config3
#define ATTR_CFG_FLD_cc_threshold_LO 0
#define ATTR_CFG_FLD_cc_threshold_HI 11
struct etm_filter {
unsigned long start_addr;
unsigned long stop_addr;
enum etm_addr_type type;
};
struct etm_filters {
struct etm_filter etm_filter[ETM_ADDR_CMP_MAX];
unsigned int nr_filters;
bool ssstatus;
};
struct etm_event_data {
struct work_struct work;
cpumask_t mask;
cpumask_t aux_hwid_done;
void *snk_config;
u32 cfg_hash;
struct coresight_path * __percpu *path;
};
int etm_perf_symlink(struct coresight_device *csdev, bool link);
int etm_perf_add_symlink_sink(struct coresight_device *csdev);
void etm_perf_del_symlink_sink(struct coresight_device *csdev);
static inline void *etm_perf_sink_config(struct perf_output_handle *handle)
{
struct etm_event_data *data = perf_get_aux(handle);
if (data)
return data->snk_config;
return NULL;
}
int etm_perf_add_symlink_cscfg(struct device *dev,
struct cscfg_config_desc *config_desc);
void etm_perf_del_symlink_cscfg(struct cscfg_config_desc *config_desc);
int __init etm_perf_init(void);
void etm_perf_exit(void);
#endif