1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Intel SOC Telemetry Driver Header File
4 * Copyright (C) 2015, Intel Corporation.
7 #ifndef INTEL_TELEMETRY_H
8 #define INTEL_TELEMETRY_H
10 #define TELEM_MAX_EVENTS_SRAM 28
11 #define TELEM_MAX_OS_ALLOCATED_EVENTS 20
13 #include <linux/platform_data/x86/intel_scu_ipc.h>
21 struct telemetry_evtlog {
26 struct telemetry_evtconfig {
27 /* Array of Event-IDs to Enable */
30 /* Number of Events (<29) in evtmap */
37 struct telemetry_evtmap {
42 struct telemetry_unit_config {
43 struct telemetry_evtmap *telem_evts;
51 struct telemetry_plt_config {
52 struct telemetry_unit_config pss_config;
53 struct telemetry_unit_config ioss_config;
54 struct mutex telem_trace_lock;
55 struct mutex telem_lock;
56 struct intel_pmc_dev *pmc;
57 struct intel_scu_ipc_dev *scu;
61 struct telemetry_core_ops {
62 int (*get_sampling_period)(u8 *pss_min_period, u8 *pss_max_period,
63 u8 *ioss_min_period, u8 *ioss_max_period);
65 int (*get_eventconfig)(struct telemetry_evtconfig *pss_evtconfig,
66 struct telemetry_evtconfig *ioss_evtconfig,
67 int pss_len, int ioss_len);
69 int (*update_events)(struct telemetry_evtconfig pss_evtconfig,
70 struct telemetry_evtconfig ioss_evtconfig);
72 int (*set_sampling_period)(u8 pss_period, u8 ioss_period);
74 int (*get_trace_verbosity)(enum telemetry_unit telem_unit,
77 int (*set_trace_verbosity)(enum telemetry_unit telem_unit,
80 int (*raw_read_eventlog)(enum telemetry_unit telem_unit,
81 struct telemetry_evtlog *evtlog,
82 int len, int log_all_evts);
84 int (*read_eventlog)(enum telemetry_unit telem_unit,
85 struct telemetry_evtlog *evtlog,
86 int len, int log_all_evts);
88 int (*add_events)(u8 num_pss_evts, u8 num_ioss_evts,
89 u32 *pss_evtmap, u32 *ioss_evtmap);
91 int (*reset_events)(void);
94 int telemetry_set_pltdata(const struct telemetry_core_ops *ops,
95 struct telemetry_plt_config *pltconfig);
97 int telemetry_clear_pltdata(void);
99 struct telemetry_plt_config *telemetry_get_pltdata(void);
101 int telemetry_get_evtname(enum telemetry_unit telem_unit,
102 const char **name, int len);
104 int telemetry_update_events(struct telemetry_evtconfig pss_evtconfig,
105 struct telemetry_evtconfig ioss_evtconfig);
107 int telemetry_add_events(u8 num_pss_evts, u8 num_ioss_evts,
108 u32 *pss_evtmap, u32 *ioss_evtmap);
110 int telemetry_reset_events(void);
112 int telemetry_get_eventconfig(struct telemetry_evtconfig *pss_config,
113 struct telemetry_evtconfig *ioss_config,
114 int pss_len, int ioss_len);
116 int telemetry_read_events(enum telemetry_unit telem_unit,
117 struct telemetry_evtlog *evtlog, int len);
119 int telemetry_raw_read_events(enum telemetry_unit telem_unit,
120 struct telemetry_evtlog *evtlog, int len);
122 int telemetry_read_eventlog(enum telemetry_unit telem_unit,
123 struct telemetry_evtlog *evtlog, int len);
125 int telemetry_raw_read_eventlog(enum telemetry_unit telem_unit,
126 struct telemetry_evtlog *evtlog, int len);
128 int telemetry_get_sampling_period(u8 *pss_min_period, u8 *pss_max_period,
129 u8 *ioss_min_period, u8 *ioss_max_period);
131 int telemetry_set_sampling_period(u8 pss_period, u8 ioss_period);
133 int telemetry_set_trace_verbosity(enum telemetry_unit telem_unit,
136 int telemetry_get_trace_verbosity(enum telemetry_unit telem_unit,
139 #endif /* INTEL_TELEMETRY_H */