File Index
Files and directories
Sign in
FILE

hwmon_pmu.h

File preview with syntax highlighting.

linux-6.19.14/tools/perf/util/hwmon_pmu.h C
  1/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
  2#ifndef __HWMON_PMU_H
  3#define __HWMON_PMU_H
  4
  5#include "pmu.h"
  6#include <stdbool.h>
  7
  8struct list_head;
  9struct perf_thread_map;
 10
 11/**
 12 * enum hwmon_type:
 13 *
 14 * As described in Documentation/hwmon/sysfs-interface.rst hwmon events are
 15 * defined over multiple files of the form <type><num>_<item>. This enum
 16 * captures potential <type> values.
 17 *
 18 * This enum is exposed for testing.
 19 */
 20enum hwmon_type {
 21	HWMON_TYPE_NONE,
 22
 23	HWMON_TYPE_CPU,
 24	HWMON_TYPE_CURR,
 25	HWMON_TYPE_ENERGY,
 26	HWMON_TYPE_FAN,
 27	HWMON_TYPE_HUMIDITY,
 28	HWMON_TYPE_IN,
 29	HWMON_TYPE_INTRUSION,
 30	HWMON_TYPE_POWER,
 31	HWMON_TYPE_PWM,
 32	HWMON_TYPE_TEMP,
 33
 34	HWMON_TYPE_MAX
 35};
 36
 37/**
 38 * enum hwmon_item:
 39 *
 40 * Similar to enum hwmon_type but describes the item part of a sysfs filename.
 41 *
 42 * This enum is exposed for testing.
 43 */
 44enum hwmon_item {
 45	HWMON_ITEM_NONE,
 46
 47	HWMON_ITEM_ACCURACY,
 48	HWMON_ITEM_ALARM,
 49	HWMON_ITEM_AUTO_CHANNELS_TEMP,
 50	HWMON_ITEM_AVERAGE,
 51	HWMON_ITEM_AVERAGE_HIGHEST,
 52	HWMON_ITEM_AVERAGE_INTERVAL,
 53	HWMON_ITEM_AVERAGE_INTERVAL_MAX,
 54	HWMON_ITEM_AVERAGE_INTERVAL_MIN,
 55	HWMON_ITEM_AVERAGE_LOWEST,
 56	HWMON_ITEM_AVERAGE_MAX,
 57	HWMON_ITEM_AVERAGE_MIN,
 58	HWMON_ITEM_BEEP,
 59	HWMON_ITEM_CAP,
 60	HWMON_ITEM_CAP_HYST,
 61	HWMON_ITEM_CAP_MAX,
 62	HWMON_ITEM_CAP_MIN,
 63	HWMON_ITEM_CRIT,
 64	HWMON_ITEM_CRIT_HYST,
 65	HWMON_ITEM_DIV,
 66	HWMON_ITEM_EMERGENCY,
 67	HWMON_ITEM_EMERGENCY_HIST,
 68	HWMON_ITEM_ENABLE,
 69	HWMON_ITEM_FAULT,
 70	HWMON_ITEM_FREQ,
 71	HWMON_ITEM_HIGHEST,
 72	HWMON_ITEM_INPUT,
 73	HWMON_ITEM_LABEL,
 74	HWMON_ITEM_LCRIT,
 75	HWMON_ITEM_LCRIT_HYST,
 76	HWMON_ITEM_LOWEST,
 77	HWMON_ITEM_MAX,
 78	HWMON_ITEM_MAX_HYST,
 79	HWMON_ITEM_MIN,
 80	HWMON_ITEM_MIN_HYST,
 81	HWMON_ITEM_MOD,
 82	HWMON_ITEM_OFFSET,
 83	HWMON_ITEM_PULSES,
 84	HWMON_ITEM_RATED_MAX,
 85	HWMON_ITEM_RATED_MIN,
 86	HWMON_ITEM_RESET_HISTORY,
 87	HWMON_ITEM_TARGET,
 88	HWMON_ITEM_TYPE,
 89	HWMON_ITEM_VID,
 90
 91	HWMON_ITEM__MAX,
 92};
 93
 94/**
 95 * union hwmon_pmu_event_key: Key for hwmon_pmu->events as such each key
 96 * represents an event.
 97 * union is exposed for testing to ensure problems are avoided on big
 98 * endian machines.
 99 *
100 * Related hwmon files start <type><number> that this key represents.
101 */
102union hwmon_pmu_event_key {
103	long type_and_num;
104	struct {
105		int num :16;
106		enum hwmon_type type :8;
107	};
108};
109
110bool perf_pmu__is_hwmon(const struct perf_pmu *pmu);
111bool evsel__is_hwmon(const struct evsel *evsel);
112
113/**
114 * parse_hwmon_filename() - Parse filename into constituent parts.
115 *
116 * @filename: To be parsed, of the form <type><number>_<item>.
117 * @type: The type defined from the parsed file name.
118 * @number: The number of the type, for example there may be more than 1 fan.
119 * @item: A hwmon <type><number> may have multiple associated items.
120 * @alarm: Is the filename for an alarm value?
121 *
122 * An example of a hwmon filename is "temp1_input". The type is temp for a
123 * temperature value. The number is 1. The item within the file is an input
124 * value - the temperature itself. This file doesn't contain an alarm value.
125 *
126 * Exposed for testing.
127 */
128bool parse_hwmon_filename(const char *filename,
129			  enum hwmon_type *type,
130			  int *number,
131			  enum hwmon_item *item,
132			  bool *alarm);
133
134/**
135 * hwmon_pmu__new() - Allocate and construct a hwmon PMU.
136 *
137 * @pmus: The list of PMUs to be added to.
138 * @hwmon_dir: The path to a hwmon directory.
139 * @sysfs_name: Name of the hwmon sysfs directory like hwmon0.
140 * @name: The contents of the "name" file in the hwmon directory.
141 *
142 * Exposed for testing. Regular construction should happen via
143 * perf_pmus__read_hwmon_pmus.
144 */
145struct perf_pmu *hwmon_pmu__new(struct list_head *pmus, const char *hwmon_dir,
146				const char *sysfs_name, const char *name);
147void hwmon_pmu__exit(struct perf_pmu *pmu);
148
149int hwmon_pmu__for_each_event(struct perf_pmu *pmu, void *state, pmu_event_callback cb);
150size_t hwmon_pmu__num_events(struct perf_pmu *pmu);
151bool hwmon_pmu__have_event(struct perf_pmu *pmu, const char *name);
152int hwmon_pmu__config_terms(const struct perf_pmu *pmu,
153			    struct perf_event_attr *attr,
154			    struct parse_events_terms *terms,
155			    struct parse_events_error *err);
156int hwmon_pmu__check_alias(struct parse_events_terms *terms, struct perf_pmu_info *info,
157			   struct parse_events_error *err);
158
159int perf_pmus__read_hwmon_pmus(struct list_head *pmus);
160
161
162int evsel__hwmon_pmu_open(struct evsel *evsel,
163			 struct perf_thread_map *threads,
164			 int start_cpu_map_idx, int end_cpu_map_idx);
165int evsel__hwmon_pmu_read(struct evsel *evsel, int cpu_map_idx, int thread);
166
167#endif /* __HWMON_PMU_H */
~/ Read-only file preview.