xref: /linux/tools/lib/thermal/include/thermal.h (revision c34e9ab9a612ee8b18273398ef75c207b01f516d)
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
22 extern "C" {
23 #endif
24 
25 struct thermal_sampling_ops {
26 	int (*tz_temp)(int tz_id, int temp, void *arg);
27 };
28 
29 struct 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 
50 struct thermal_ops {
51 	struct thermal_sampling_ops sampling;
52 	struct thermal_events_ops events;
53 };
54 
55 struct thermal_trip {
56 	int id;
57 	int type;
58 	int temp;
59 	int hyst;
60 };
61 
62 struct thermal_threshold {
63 	int temperature;
64 	int direction;
65 };
66 
67 struct 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 
76 struct 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 
84 typedef enum {
85 	THERMAL_ERROR = -1,
86 	THERMAL_SUCCESS = 0,
87 } thermal_error_t;
88 
89 struct thermal_handler;
90 
91 typedef int (*cb_tz_t)(struct thermal_zone *, void *);
92 
93 typedef int (*cb_tt_t)(struct thermal_trip *, void *);
94 
95 typedef int (*cb_tc_t)(struct thermal_cdev *, void *);
96 
97 typedef int (*cb_th_t)(struct thermal_threshold *, void *);
98 
99 LIBTHERMAL_API int for_each_thermal_zone(struct thermal_zone *tz, cb_tz_t cb, void *arg);
100 
101 LIBTHERMAL_API int for_each_thermal_trip(struct thermal_trip *tt, cb_tt_t cb, void *arg);
102 
103 LIBTHERMAL_API int for_each_thermal_cdev(struct thermal_cdev *cdev, cb_tc_t cb, void *arg);
104 
105 LIBTHERMAL_API int for_each_thermal_threshold(struct thermal_threshold *th, cb_th_t cb, void *arg);
106 
107 LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_name(struct thermal_zone *tz,
108 							      const char *name);
109 
110 LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_id(struct thermal_zone *tz, int id);
111 
112 LIBTHERMAL_API struct thermal_zone *thermal_zone_discover(struct thermal_handler *th);
113 
114 LIBTHERMAL_API struct thermal_handler *thermal_init(struct thermal_ops *ops);
115 
116 LIBTHERMAL_API void thermal_exit(struct thermal_handler *th);
117 
118 /*
119  * Netlink thermal events
120  */
121 LIBTHERMAL_API thermal_error_t thermal_events_exit(struct thermal_handler *th);
122 
123 LIBTHERMAL_API thermal_error_t thermal_events_init(struct thermal_handler *th);
124 
125 LIBTHERMAL_API thermal_error_t thermal_events_handle(struct thermal_handler *th, void *arg);
126 
127 LIBTHERMAL_API int thermal_events_fd(struct thermal_handler *th);
128 
129 /*
130  * Netlink thermal commands
131  */
132 LIBTHERMAL_API thermal_error_t thermal_cmd_exit(struct thermal_handler *th);
133 
134 LIBTHERMAL_API thermal_error_t thermal_cmd_init(struct thermal_handler *th);
135 
136 LIBTHERMAL_API thermal_error_t thermal_cmd_get_tz(struct thermal_handler *th,
137 						  struct thermal_zone **tz);
138 
139 LIBTHERMAL_API thermal_error_t thermal_cmd_get_cdev(struct thermal_handler *th,
140 						    struct thermal_cdev **tc);
141 
142 LIBTHERMAL_API thermal_error_t thermal_cmd_get_trip(struct thermal_handler *th,
143 						    struct thermal_zone *tz);
144 
145 LIBTHERMAL_API thermal_error_t thermal_cmd_get_governor(struct thermal_handler *th,
146 							struct thermal_zone *tz);
147 
148 LIBTHERMAL_API thermal_error_t thermal_cmd_get_temp(struct thermal_handler *th,
149 						    struct thermal_zone *tz);
150 
151 LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_get(struct thermal_handler *th,
152 							 struct thermal_zone *tz);
153 
154 LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_add(struct thermal_handler *th,
155                                                          struct thermal_zone *tz,
156                                                          int temperature,
157                                                          int direction);
158 
159 LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_delete(struct thermal_handler *th,
160                                                             struct thermal_zone *tz,
161                                                             int temperature,
162                                                             int direction);
163 
164 LIBTHERMAL_API thermal_error_t thermal_cmd_threshold_flush(struct thermal_handler *th,
165                                                            struct thermal_zone *tz);
166 
167 /*
168  * Netlink thermal samples
169  */
170 LIBTHERMAL_API thermal_error_t thermal_sampling_exit(struct thermal_handler *th);
171 
172 LIBTHERMAL_API thermal_error_t thermal_sampling_init(struct thermal_handler *th);
173 
174 LIBTHERMAL_API thermal_error_t thermal_sampling_handle(struct thermal_handler *th, void *arg);
175 
176 LIBTHERMAL_API int thermal_sampling_fd(struct thermal_handler *th);
177 
178 #endif /* __LIBTHERMAL_H */
179 
180 #ifdef __cplusplus
181 }
182 #endif
183