Linux Audio

Check our new training course

Loading...
v6.9.4
  1/* SPDX-License-Identifier: LGPL-2.1+ */
  2/* Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org> */
  3#ifndef __LIBTHERMAL_H
  4#define __LIBTHERMAL_H
  5
  6#include <linux/thermal.h>
 
  7
  8#ifndef LIBTHERMAL_API
  9#define LIBTHERMAL_API __attribute__((visibility("default")))
 10#endif
 11
 
 
 
 
 
 
 
 
 12#ifdef __cplusplus
 13extern "C" {
 14#endif
 15
 16struct thermal_sampling_ops {
 17	int (*tz_temp)(int tz_id, int temp, void *arg);
 18};
 19
 20struct thermal_events_ops {
 21	int (*tz_create)(const char *name, int tz_id, void *arg);
 22	int (*tz_delete)(int tz_id, void *arg);
 23	int (*tz_enable)(int tz_id, void *arg);
 24	int (*tz_disable)(int tz_id, void *arg);
 25	int (*trip_high)(int tz_id, int trip_id, int temp, void *arg);
 26	int (*trip_low)(int tz_id, int trip_id, int temp, void *arg);
 27	int (*trip_add)(int tz_id, int trip_id, int type, int temp, int hyst, void *arg);
 28	int (*trip_change)(int tz_id, int trip_id, int type, int temp, int hyst, void *arg);
 29	int (*trip_delete)(int tz_id, int trip_id, void *arg);
 30	int (*cdev_add)(const char *name, int cdev_id, int max_state, void *arg);
 31	int (*cdev_delete)(int cdev_id, void *arg);
 32	int (*cdev_update)(int cdev_id, int cur_state, void *arg);
 33	int (*gov_change)(int tz_id, const char *gov_name, void *arg);
 
 
 
 
 
 34};
 35
 36struct thermal_ops {
 37	struct thermal_sampling_ops sampling;
 38	struct thermal_events_ops events;
 39};
 40
 41struct thermal_trip {
 42	int id;
 43	int type;
 44	int temp;
 45	int hyst;
 46};
 47
 
 
 
 
 
 48struct thermal_zone {
 49	int id;
 50	int temp;
 51	char name[THERMAL_NAME_LENGTH];
 52	char governor[THERMAL_NAME_LENGTH];
 53	struct thermal_trip *trip;
 
 54};
 55
 56struct thermal_cdev {
 57	int id;
 58	char name[THERMAL_NAME_LENGTH];
 59	int max_state;
 60	int min_state;
 61	int cur_state;
 62};
 63
 64typedef enum {
 65	THERMAL_ERROR = -1,
 66	THERMAL_SUCCESS = 0,
 67} thermal_error_t;
 68
 69struct thermal_handler;
 70
 71typedef int (*cb_tz_t)(struct thermal_zone *, void *);
 72
 73typedef int (*cb_tt_t)(struct thermal_trip *, void *);
 74
 75typedef int (*cb_tc_t)(struct thermal_cdev *, void *);
 76
 
 
 77LIBTHERMAL_API int for_each_thermal_zone(struct thermal_zone *tz, cb_tz_t cb, void *arg);
 78
 79LIBTHERMAL_API int for_each_thermal_trip(struct thermal_trip *tt, cb_tt_t cb, void *arg);
 80
 81LIBTHERMAL_API int for_each_thermal_cdev(struct thermal_cdev *cdev, cb_tc_t cb, void *arg);
 82
 
 
 83LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_name(struct thermal_zone *tz,
 84							      const char *name);
 85
 86LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_id(struct thermal_zone *tz, int id);
 87
 88LIBTHERMAL_API struct thermal_zone *thermal_zone_discover(struct thermal_handler *th);
 89
 90LIBTHERMAL_API struct thermal_handler *thermal_init(struct thermal_ops *ops);
 91
 92LIBTHERMAL_API void thermal_exit(struct thermal_handler *th);
 93
 94/*
 95 * Netlink thermal events
 96 */
 97LIBTHERMAL_API thermal_error_t thermal_events_exit(struct thermal_handler *th);
 98
 99LIBTHERMAL_API thermal_error_t thermal_events_init(struct thermal_handler *th);
100
101LIBTHERMAL_API thermal_error_t thermal_events_handle(struct thermal_handler *th, void *arg);
102
103LIBTHERMAL_API int thermal_events_fd(struct thermal_handler *th);
104
105/*
106 * Netlink thermal commands
107 */
108LIBTHERMAL_API thermal_error_t thermal_cmd_exit(struct thermal_handler *th);
109
110LIBTHERMAL_API thermal_error_t thermal_cmd_init(struct thermal_handler *th);
111
112LIBTHERMAL_API thermal_error_t thermal_cmd_get_tz(struct thermal_handler *th,
113						  struct thermal_zone **tz);
114
115LIBTHERMAL_API thermal_error_t thermal_cmd_get_cdev(struct thermal_handler *th,
116						    struct thermal_cdev **tc);
117
118LIBTHERMAL_API thermal_error_t thermal_cmd_get_trip(struct thermal_handler *th,
119						    struct thermal_zone *tz);
120
121LIBTHERMAL_API thermal_error_t thermal_cmd_get_governor(struct thermal_handler *th,
122							struct thermal_zone *tz);
123
124LIBTHERMAL_API thermal_error_t thermal_cmd_get_temp(struct thermal_handler *th,
125						    struct thermal_zone *tz);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
127/*
128 * Netlink thermal samples
129 */
130LIBTHERMAL_API thermal_error_t thermal_sampling_exit(struct thermal_handler *th);
131
132LIBTHERMAL_API thermal_error_t thermal_sampling_init(struct thermal_handler *th);
133
134LIBTHERMAL_API thermal_error_t thermal_sampling_handle(struct thermal_handler *th, void *arg);
135
136LIBTHERMAL_API int thermal_sampling_fd(struct thermal_handler *th);
137
138#endif /* __LIBTHERMAL_H */
139
140#ifdef __cplusplus
141}
142#endif
v6.13.7
  1/* SPDX-License-Identifier: LGPL-2.1+ */
  2/* Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org> */
  3#ifndef __LIBTHERMAL_H
  4#define __LIBTHERMAL_H
  5
  6#include <linux/thermal.h>
  7#include <sys/types.h>
  8
  9#ifndef LIBTHERMAL_API
 10#define LIBTHERMAL_API __attribute__((visibility("default")))
 11#endif
 12
 13#ifndef THERMAL_THRESHOLD_WAY_UP
 14#define THERMAL_THRESHOLD_WAY_UP 0x1
 15#endif
 16
 17#ifndef THERMAL_THRESHOLD_WAY_DOWN
 18#define THERMAL_THRESHOLD_WAY_DOWN 0x2
 19#endif
 20
 21#ifdef __cplusplus
 22extern "C" {
 23#endif
 24
 25struct thermal_sampling_ops {
 26	int (*tz_temp)(int tz_id, int temp, void *arg);
 27};
 28
 29struct thermal_events_ops {
 30	int (*tz_create)(const char *name, int tz_id, void *arg);
 31	int (*tz_delete)(int tz_id, void *arg);
 32	int (*tz_enable)(int tz_id, void *arg);
 33	int (*tz_disable)(int tz_id, void *arg);
 34	int (*trip_high)(int tz_id, int trip_id, int temp, void *arg);
 35	int (*trip_low)(int tz_id, int trip_id, int temp, void *arg);
 36	int (*trip_add)(int tz_id, int trip_id, int type, int temp, int hyst, void *arg);
 37	int (*trip_change)(int tz_id, int trip_id, int type, int temp, int hyst, void *arg);
 38	int (*trip_delete)(int tz_id, int trip_id, void *arg);
 39	int (*cdev_add)(const char *name, int cdev_id, int max_state, void *arg);
 40	int (*cdev_delete)(int cdev_id, void *arg);
 41	int (*cdev_update)(int cdev_id, int cur_state, void *arg);
 42	int (*gov_change)(int tz_id, const char *gov_name, void *arg);
 43	int (*threshold_add)(int tz_id, int temperature, int direction, void *arg);
 44	int (*threshold_delete)(int tz_id, int temperature, int direction, void *arg);
 45	int (*threshold_flush)(int tz_id, void *arg);
 46	int (*threshold_up)(int tz_id, int temp, int prev_temp, void *arg);
 47	int (*threshold_down)(int tz_id, int temp, int prev_temp, void *arg);
 48};
 49
 50struct thermal_ops {
 51	struct thermal_sampling_ops sampling;
 52	struct thermal_events_ops events;
 53};
 54
 55struct thermal_trip {
 56	int id;
 57	int type;
 58	int temp;
 59	int hyst;
 60};
 61
 62struct thermal_threshold {
 63	int temperature;
 64	int direction;
 65};
 66
 67struct thermal_zone {
 68	int id;
 69	int temp;
 70	char name[THERMAL_NAME_LENGTH];
 71	char governor[THERMAL_NAME_LENGTH];
 72	struct thermal_trip *trip;
 73	struct thermal_threshold *thresholds;
 74};
 75
 76struct thermal_cdev {
 77	int id;
 78	char name[THERMAL_NAME_LENGTH];
 79	int max_state;
 80	int min_state;
 81	int cur_state;
 82};
 83
 84typedef enum {
 85	THERMAL_ERROR = -1,
 86	THERMAL_SUCCESS = 0,
 87} thermal_error_t;
 88
 89struct thermal_handler;
 90
 91typedef int (*cb_tz_t)(struct thermal_zone *, void *);
 92
 93typedef int (*cb_tt_t)(struct thermal_trip *, void *);
 94
 95typedef int (*cb_tc_t)(struct thermal_cdev *, void *);
 96
 97typedef int (*cb_th_t)(struct thermal_threshold *, void *);
 98
 99LIBTHERMAL_API int for_each_thermal_zone(struct thermal_zone *tz, cb_tz_t cb, void *arg);
100
101LIBTHERMAL_API int for_each_thermal_trip(struct thermal_trip *tt, cb_tt_t cb, void *arg);
102
103LIBTHERMAL_API int for_each_thermal_cdev(struct thermal_cdev *cdev, cb_tc_t cb, void *arg);
104
105LIBTHERMAL_API int for_each_thermal_threshold(struct thermal_threshold *th, cb_th_t cb, void *arg);
106
107LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_name(struct thermal_zone *tz,
108							      const char *name);
109
110LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_id(struct thermal_zone *tz, int id);
111
112LIBTHERMAL_API struct thermal_zone *thermal_zone_discover(struct thermal_handler *th);
113
114LIBTHERMAL_API struct thermal_handler *thermal_init(struct thermal_ops *ops);
115
116LIBTHERMAL_API void thermal_exit(struct thermal_handler *th);
117
118/*
119 * Netlink thermal events
120 */
121LIBTHERMAL_API thermal_error_t thermal_events_exit(struct thermal_handler *th);
122
123LIBTHERMAL_API thermal_error_t thermal_events_init(struct thermal_handler *th);
124
125LIBTHERMAL_API thermal_error_t thermal_events_handle(struct thermal_handler *th, void *arg);
126
127LIBTHERMAL_API int thermal_events_fd(struct thermal_handler *th);
128
129/*
130 * Netlink thermal commands
131 */
132LIBTHERMAL_API thermal_error_t thermal_cmd_exit(struct thermal_handler *th);
133
134LIBTHERMAL_API thermal_error_t thermal_cmd_init(struct thermal_handler *th);
135
136LIBTHERMAL_API thermal_error_t thermal_cmd_get_tz(struct thermal_handler *th,
137						  struct thermal_zone **tz);
138
139LIBTHERMAL_API thermal_error_t thermal_cmd_get_cdev(struct thermal_handler *th,
140						    struct thermal_cdev **tc);
141
142LIBTHERMAL_API thermal_error_t thermal_cmd_get_trip(struct thermal_handler *th,
143						    struct thermal_zone *tz);
144
145LIBTHERMAL_API thermal_error_t thermal_cmd_get_governor(struct thermal_handler *th,
146							struct thermal_zone *tz);
147
148LIBTHERMAL_API thermal_error_t thermal_cmd_get_temp(struct thermal_handler *th,
149						    struct thermal_zone *tz);
150
151LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_get(struct thermal_handler *th,
152							 struct thermal_zone *tz);
153
154LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_add(struct thermal_handler *th,
155                                                         struct thermal_zone *tz,
156                                                         int temperature,
157                                                         int direction);
158
159LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_delete(struct thermal_handler *th,
160                                                            struct thermal_zone *tz,
161                                                            int temperature,
162                                                            int direction);
163
164LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_flush(struct thermal_handler *th,
165                                                           struct thermal_zone *tz);
166
167/*
168 * Netlink thermal samples
169 */
170LIBTHERMAL_API thermal_error_t thermal_sampling_exit(struct thermal_handler *th);
171
172LIBTHERMAL_API thermal_error_t thermal_sampling_init(struct thermal_handler *th);
173
174LIBTHERMAL_API thermal_error_t thermal_sampling_handle(struct thermal_handler *th, void *arg);
175
176LIBTHERMAL_API int thermal_sampling_fd(struct thermal_handler *th);
177
178#endif /* __LIBTHERMAL_H */
179
180#ifdef __cplusplus
181}
182#endif