xref: /linux/tools/thermal/tmon/tmon.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1  /* SPDX-License-Identifier: GPL-2.0-or-later */
2  /*
3   * tmon.h contains data structures and constants used by TMON
4   *
5   * Copyright (C) 2012 Intel Corporation. All rights reserved.
6   *
7   * Author Name Jacob Pan <jacob.jun.pan@linux.intel.com>
8   */
9  
10  #ifndef TMON_H
11  #define TMON_H
12  
13  #define MAX_DISP_TEMP 125
14  #define MAX_CTRL_TEMP 105
15  #define MIN_CTRL_TEMP 40
16  #define MAX_NR_TZONE 16
17  #define MAX_NR_CDEV 32
18  #define MAX_NR_TRIP 16
19  #define MAX_NR_CDEV_TRIP 12 /* number of cooling devices that can bind
20  			     * to a thermal zone trip.
21  			     */
22  #define MAX_TEMP_KC 140000
23  /* starting char position to draw sensor data, such as tz names
24   * trip point list, etc.
25   */
26  #define DATA_LEFT_ALIGN 10
27  #define NR_LINES_TZDATA 1
28  #define TMON_LOG_FILE "/var/tmp/tmon.log"
29  
30  #include <sys/time.h>
31  #include <pthread.h>
32  
33  extern unsigned long ticktime;
34  extern double time_elapsed;
35  extern unsigned long target_temp_user;
36  extern int dialogue_on;
37  extern char ctrl_cdev[];
38  extern pthread_mutex_t input_lock;
39  extern int tmon_exit;
40  extern int target_thermal_zone;
41  /* use fixed size record to simplify data processing and transfer
42   * TBD: more info to be added, e.g. programmable trip point data.
43  */
44  struct thermal_data_record {
45  	struct timeval tv;
46  	unsigned long temp[MAX_NR_TZONE];
47  	double pid_out_pct;
48  };
49  
50  struct cdev_info {
51  	char type[64];
52  	int instance;
53  	unsigned long max_state;
54  	unsigned long cur_state;
55  	unsigned long flag;
56  };
57  
58  enum trip_type {
59  	THERMAL_TRIP_CRITICAL,
60  	THERMAL_TRIP_HOT,
61  	THERMAL_TRIP_PASSIVE,
62  	THERMAL_TRIP_ACTIVE,
63  	NR_THERMAL_TRIP_TYPE,
64  };
65  
66  struct trip_point {
67  	enum trip_type type;
68  	unsigned long temp;
69  	unsigned long hysteresis;
70  	int attribute; /* programmability etc. */
71  };
72  
73  /* thermal zone configuration information, binding with cooling devices could
74   * change at runtime.
75   */
76  struct tz_info {
77  	char type[256]; /* e.g. acpitz */
78  	int instance;
79  	int passive; /* active zone has passive node to force passive mode */
80  	int nr_cdev; /* number of cooling device binded */
81  	int nr_trip_pts;
82  	struct trip_point tp[MAX_NR_TRIP];
83  	unsigned long cdev_binding; /* bitmap for attached cdevs */
84  	/* cdev bind trip points, allow one cdev bind to multiple trips */
85  	unsigned long trip_binding[MAX_NR_CDEV];
86  };
87  
88  struct tmon_platform_data {
89  	int nr_tz_sensor;
90  	int nr_cooling_dev;
91  	/* keep track of instance ids since there might be gaps */
92  	int max_tz_instance;
93  	int max_cdev_instance;
94  	struct tz_info *tzi;
95  	struct cdev_info *cdi;
96  };
97  
98  struct control_ops {
99  	void (*set_ratio)(unsigned long ratio);
100  	unsigned long (*get_ratio)(unsigned long ratio);
101  
102  };
103  
104  enum cdev_types {
105  	CDEV_TYPE_PROC,
106  	CDEV_TYPE_FAN,
107  	CDEV_TYPE_MEM,
108  	CDEV_TYPE_NR,
109  };
110  
111  /* REVISIT: the idea is to group sensors if possible, e.g. on intel mid
112   * we have "skin0", "skin1", "sys", "msicdie"
113   * on DPTF enabled systems, we might have PCH, TSKN, TAMB, etc.
114   */
115  enum tzone_types {
116  	TZONE_TYPE_ACPI,
117  	TZONE_TYPE_PCH,
118  	TZONE_TYPE_NR,
119  };
120  
121  /* limit the output of PID controller adjustment */
122  #define LIMIT_HIGH (95)
123  #define LIMIT_LOW  (2)
124  
125  struct pid_params {
126  	double kp;  /* Controller gain from Dialog Box */
127  	double ki;  /* Time-constant for I action from Dialog Box */
128  	double kd;  /* Time-constant for D action from Dialog Box */
129  	double ts;
130  	double k_lpf;
131  
132  	double t_target;
133  	double y_k;
134  };
135  
136  extern int init_thermal_controller(void);
137  extern void controller_handler(const double xk, double *yk);
138  
139  extern struct tmon_platform_data ptdata;
140  extern struct pid_params p_param;
141  
142  extern FILE *tmon_log;
143  extern int cur_thermal_record; /* index to the trec array */
144  extern struct thermal_data_record trec[];
145  extern const char *trip_type_name[];
146  extern unsigned long no_control;
147  
148  extern void initialize_curses(void);
149  extern void show_controller_stats(char *line);
150  extern void show_title_bar(void);
151  extern void setup_windows(void);
152  extern void disable_tui(void);
153  extern void show_sensors_w(void);
154  extern void show_data_w(void);
155  extern void write_status_bar(int x, char *line);
156  extern void show_control_w();
157  
158  extern void show_cooling_device(void);
159  extern void show_dialogue(void);
160  extern int update_thermal_data(void);
161  
162  extern int probe_thermal_sysfs(void);
163  extern void free_thermal_data(void);
164  extern	void resize_handler(int sig);
165  extern void set_ctrl_state(unsigned long state);
166  extern void get_ctrl_state(unsigned long *state);
167  extern void *handle_tui_events(void *arg);
168  extern int sysfs_set_ulong(char *path, char *filename, unsigned long val);
169  extern int zone_instance_to_index(int zone_inst);
170  extern void close_windows(void);
171  
172  #define PT_COLOR_DEFAULT    1
173  #define PT_COLOR_HEADER_BAR 2
174  #define PT_COLOR_ERROR      3
175  #define PT_COLOR_RED        4
176  #define PT_COLOR_YELLOW     5
177  #define PT_COLOR_GREEN      6
178  #define PT_COLOR_BRIGHT     7
179  #define PT_COLOR_BLUE	    8
180  
181  /* each thermal zone uses 12 chars, 8 for name, 2 for instance, 2 space
182   * also used to list trip points in forms of AAAC, which represents
183   * A: Active
184   * C: Critical
185   */
186  #define TZONE_RECORD_SIZE 12
187  #define TZ_LEFT_ALIGN 32
188  #define CDEV_NAME_SIZE 20
189  #define CDEV_FLAG_IN_CONTROL (1 << 0)
190  
191  /* dialogue box starts */
192  #define DIAG_X 48
193  #define DIAG_Y 8
194  #define THERMAL_SYSFS "/sys/class/thermal"
195  #define CDEV "cooling_device"
196  #define TZONE "thermal_zone"
197  #define TDATA_LEFT 16
198  #endif /* TMON_H */
199