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