aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/thermal/include/thermal.h
blob: 1abc560602cfb9902aeb506403984d343a72a87e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/* SPDX-License-Identifier: LGPL-2.1+ */
/* Copyright (C) 2022, Linaro Ltd - Daniel Lezcano <daniel.lezcano@linaro.org> */
#ifndef __LIBTHERMAL_H
#define __LIBTHERMAL_H

#include <linux/thermal.h>

#ifndef LIBTHERMAL_API
#define LIBTHERMAL_API __attribute__((visibility("default")))
#endif

#ifdef __cplusplus
extern "C" {
#endif

struct thermal_sampling_ops {
	int (*tz_temp)(int tz_id, int temp, void *arg);
};

struct thermal_events_ops {
	int (*tz_create)(const char *name, int tz_id, void *arg);
	int (*tz_delete)(int tz_id, void *arg);
	int (*tz_enable)(int tz_id, void *arg);
	int (*tz_disable)(int tz_id, void *arg);
	int (*trip_high)(int tz_id, int trip_id, int temp, void *arg);
	int (*trip_low)(int tz_id, int trip_id, int temp, void *arg);
	int (*trip_add)(int tz_id, int trip_id, int type, int temp, int hyst, void *arg);
	int (*trip_change)(int tz_id, int trip_id, int type, int temp, int hyst, void *arg);
	int (*trip_delete)(int tz_id, int trip_id, void *arg);
	int (*cdev_add)(const char *name, int cdev_id, int max_state, void *arg);
	int (*cdev_delete)(int cdev_id, void *arg);
	int (*cdev_update)(int cdev_id, int cur_state, void *arg);
	int (*gov_change)(int tz_id, const char *gov_name, void *arg);
};

struct thermal_ops {
	struct thermal_sampling_ops sampling;
	struct thermal_events_ops events;
};

struct thermal_trip {
	int id;
	int type;
	int temp;
	int hyst;
};

struct thermal_zone {
	int id;
	int temp;
	char name[THERMAL_NAME_LENGTH];
	char governor[THERMAL_NAME_LENGTH];
	struct thermal_trip *trip;
};

struct thermal_cdev {
	int id;
	char name[THERMAL_NAME_LENGTH];
	int max_state;
	int min_state;
	int cur_state;
};

typedef enum {
	THERMAL_ERROR = -1,
	THERMAL_SUCCESS = 0,
} thermal_error_t;

struct thermal_handler;

typedef int (*cb_tz_t)(struct thermal_zone *, void *);

typedef int (*cb_tt_t)(struct thermal_trip *, void *);

typedef int (*cb_tc_t)(struct thermal_cdev *, void *);

LIBTHERMAL_API int for_each_thermal_zone(struct thermal_zone *tz, cb_tz_t cb, void *arg);

LIBTHERMAL_API int for_each_thermal_trip(struct thermal_trip *tt, cb_tt_t cb, void *arg);

LIBTHERMAL_API int for_each_thermal_cdev(struct thermal_cdev *cdev, cb_tc_t cb, void *arg);

LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_name(struct thermal_zone *tz,
							      const char *name);

LIBTHERMAL_API struct thermal_zone *thermal_zone_find_by_id(struct thermal_zone *tz, int id);

LIBTHERMAL_API struct thermal_zone *thermal_zone_discover(struct thermal_handler *th);

LIBTHERMAL_API struct thermal_handler *thermal_init(struct thermal_ops *ops);

LIBTHERMAL_API void thermal_exit(struct thermal_handler *th);

/*
 * Netlink thermal events
 */
LIBTHERMAL_API thermal_error_t thermal_events_exit(struct thermal_handler *th);

LIBTHERMAL_API thermal_error_t thermal_events_init(struct thermal_handler *th);

LIBTHERMAL_API thermal_error_t thermal_events_handle(struct thermal_handler *th, void *arg);

LIBTHERMAL_API int thermal_events_fd(struct thermal_handler *th);

/*
 * Netlink thermal commands
 */
LIBTHERMAL_API thermal_error_t thermal_cmd_exit(struct thermal_handler *th);

LIBTHERMAL_API thermal_error_t thermal_cmd_init(struct thermal_handler *th);

LIBTHERMAL_API thermal_error_t thermal_cmd_get_tz(struct thermal_handler *th,
						  struct thermal_zone **tz);

LIBTHERMAL_API thermal_error_t thermal_cmd_get_cdev(struct thermal_handler *th,
						    struct thermal_cdev **tc);

LIBTHERMAL_API thermal_error_t thermal_cmd_get_trip(struct thermal_handler *th,
						    struct thermal_zone *tz);

LIBTHERMAL_API thermal_error_t thermal_cmd_get_governor(struct thermal_handler *th,
							struct thermal_zone *tz);

LIBTHERMAL_API thermal_error_t thermal_cmd_get_temp(struct thermal_handler *th,
						    struct thermal_zone *tz);

/*
 * Netlink thermal samples
 */
LIBTHERMAL_API thermal_error_t thermal_sampling_exit(struct thermal_handler *th);

LIBTHERMAL_API thermal_error_t thermal_sampling_init(struct thermal_handler *th);

LIBTHERMAL_API thermal_error_t thermal_sampling_handle(struct thermal_handler *th, void *arg);

LIBTHERMAL_API int thermal_sampling_fd(struct thermal_handler *th);

#endif /* __LIBTHERMAL_H */

#ifdef __cplusplus
}
#endif