Blame view

include/linux/thermal.h 4.94 KB
203d3d4aa   Zhang Rui   the generic therm...
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
  /*
   *  thermal.h  ($Revision: 0 $)
   *
   *  Copyright (C) 2008  Intel Corp
   *  Copyright (C) 2008  Zhang Rui <rui.zhang@intel.com>
   *  Copyright (C) 2008  Sujith Thomas <sujith.thomas@intel.com>
   *
   * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   *  This program is free software; you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
   *  the Free Software Foundation; version 2 of the License.
   *
   *  This program is distributed in the hope that it will be useful, but
   *  WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   *  General Public License for more details.
   *
   *  You should have received a copy of the GNU General Public License along
   *  with this program; if not, write to the Free Software Foundation, Inc.,
   *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
   *
   * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   */
  
  #ifndef __THERMAL_H__
  #define __THERMAL_H__
  
  #include <linux/idr.h>
  #include <linux/device.h>
b1569e99c   Matthew Garrett   ACPI: move therma...
30
  #include <linux/workqueue.h>
203d3d4aa   Zhang Rui   the generic therm...
31
32
33
  
  struct thermal_zone_device;
  struct thermal_cooling_device;
6503e5df0   Matthew Garrett   thermal: use inte...
34
35
36
37
38
39
40
41
42
43
44
  enum thermal_device_mode {
  	THERMAL_DEVICE_DISABLED = 0,
  	THERMAL_DEVICE_ENABLED,
  };
  
  enum thermal_trip_type {
  	THERMAL_TRIP_ACTIVE = 0,
  	THERMAL_TRIP_PASSIVE,
  	THERMAL_TRIP_HOT,
  	THERMAL_TRIP_CRITICAL,
  };
203d3d4aa   Zhang Rui   the generic therm...
45
46
47
48
49
  struct thermal_zone_device_ops {
  	int (*bind) (struct thermal_zone_device *,
  		     struct thermal_cooling_device *);
  	int (*unbind) (struct thermal_zone_device *,
  		       struct thermal_cooling_device *);
6503e5df0   Matthew Garrett   thermal: use inte...
50
51
52
53
54
55
56
57
58
  	int (*get_temp) (struct thermal_zone_device *, unsigned long *);
  	int (*get_mode) (struct thermal_zone_device *,
  			 enum thermal_device_mode *);
  	int (*set_mode) (struct thermal_zone_device *,
  		enum thermal_device_mode);
  	int (*get_trip_type) (struct thermal_zone_device *, int,
  		enum thermal_trip_type *);
  	int (*get_trip_temp) (struct thermal_zone_device *, int,
  			      unsigned long *);
9ec732ff8   Zhang, Rui   thermal: add new ...
59
  	int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *);
b1569e99c   Matthew Garrett   ACPI: move therma...
60
61
  	int (*notify) (struct thermal_zone_device *, int,
  		       enum thermal_trip_type);
203d3d4aa   Zhang Rui   the generic therm...
62
63
64
  };
  
  struct thermal_cooling_device_ops {
6503e5df0   Matthew Garrett   thermal: use inte...
65
66
67
  	int (*get_max_state) (struct thermal_cooling_device *, unsigned long *);
  	int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *);
  	int (*set_cur_state) (struct thermal_cooling_device *, unsigned long);
203d3d4aa   Zhang Rui   the generic therm...
68
69
70
  };
  
  #define THERMAL_TRIPS_NONE -1
5f1a3f2ac   Krzysztof Helt   acpi thermal trip...
71
  #define THERMAL_MAX_TRIPS 12
203d3d4aa   Zhang Rui   the generic therm...
72
73
74
75
76
77
  #define THERMAL_NAME_LENGTH 20
  struct thermal_cooling_device {
  	int id;
  	char type[THERMAL_NAME_LENGTH];
  	struct device device;
  	void *devdata;
5b275ce27   Alan Cox   thermal: make ops...
78
  	const struct thermal_cooling_device_ops *ops;
203d3d4aa   Zhang Rui   the generic therm...
79
80
  	struct list_head node;
  };
041d4bbf1   Zhang Rui   ACPI: CELSIUS_TO_...
81
82
83
  #define KELVIN_TO_CELSIUS(t)	(long)(((long)t-2732 >= 0) ?	\
  				((long)t-2732+5)/10 : ((long)t-2732-5)/10)
  #define CELSIUS_TO_KELVIN(t)	((t)*10+2732)
203d3d4aa   Zhang Rui   the generic therm...
84
85
86
87
88
89
  struct thermal_zone_device {
  	int id;
  	char type[THERMAL_NAME_LENGTH];
  	struct device device;
  	void *devdata;
  	int trips;
b1569e99c   Matthew Garrett   ACPI: move therma...
90
91
92
93
94
95
  	int tc1;
  	int tc2;
  	int passive_delay;
  	int polling_delay;
  	int last_temperature;
  	bool passive;
03a971a28   Matthew Garrett   thermal: support ...
96
  	unsigned int forced_passive;
5b275ce27   Alan Cox   thermal: make ops...
97
  	const struct thermal_zone_device_ops *ops;
203d3d4aa   Zhang Rui   the generic therm...
98
99
100
101
  	struct list_head cooling_devices;
  	struct idr idr;
  	struct mutex lock;	/* protect cooling devices list */
  	struct list_head node;
b1569e99c   Matthew Garrett   ACPI: move therma...
102
  	struct delayed_work poll_queue;
203d3d4aa   Zhang Rui   the generic therm...
103
  };
4cb187287   R.Durgadoss   thermal: Add even...
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
  /* Adding event notification support elements */
  #define THERMAL_GENL_FAMILY_NAME                "thermal_event"
  #define THERMAL_GENL_VERSION                    0x01
  #define THERMAL_GENL_MCAST_GROUP_NAME           "thermal_mc_group"
  
  enum events {
  	THERMAL_AUX0,
  	THERMAL_AUX1,
  	THERMAL_CRITICAL,
  	THERMAL_DEV_FAULT,
  };
  
  struct thermal_genl_event {
  	u32 orig;
  	enum events event;
  };
  /* attributes of thermal_genl_family */
  enum {
  	THERMAL_GENL_ATTR_UNSPEC,
  	THERMAL_GENL_ATTR_EVENT,
  	__THERMAL_GENL_ATTR_MAX,
  };
  #define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
  
  /* commands supported by the thermal_genl_family */
  enum {
  	THERMAL_GENL_CMD_UNSPEC,
  	THERMAL_GENL_CMD_EVENT,
  	__THERMAL_GENL_CMD_MAX,
  };
  #define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
203d3d4aa   Zhang Rui   the generic therm...
135
136
  
  struct thermal_zone_device *thermal_zone_device_register(char *, int, void *,
5b275ce27   Alan Cox   thermal: make ops...
137
138
  		const struct thermal_zone_device_ops *, int tc1, int tc2,
  		int passive_freq, int polling_freq);
203d3d4aa   Zhang Rui   the generic therm...
139
140
141
142
143
144
  void thermal_zone_device_unregister(struct thermal_zone_device *);
  
  int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
  				     struct thermal_cooling_device *);
  int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int,
  				       struct thermal_cooling_device *);
b1569e99c   Matthew Garrett   ACPI: move therma...
145
  void thermal_zone_device_update(struct thermal_zone_device *);
203d3d4aa   Zhang Rui   the generic therm...
146
  struct thermal_cooling_device *thermal_cooling_device_register(char *, void *,
5b275ce27   Alan Cox   thermal: make ops...
147
  		const struct thermal_cooling_device_ops *);
203d3d4aa   Zhang Rui   the generic therm...
148
  void thermal_cooling_device_unregister(struct thermal_cooling_device *);
af06216a8   Rafael J. Wysocki   ACPI: Fix build f...
149
150
  
  #ifdef CONFIG_NET
4cb187287   R.Durgadoss   thermal: Add even...
151
  extern int generate_netlink_event(u32 orig, enum events event);
af06216a8   Rafael J. Wysocki   ACPI: Fix build f...
152
153
154
155
156
157
  #else
  static inline int generate_netlink_event(u32 orig, enum events event)
  {
  	return 0;
  }
  #endif
203d3d4aa   Zhang Rui   the generic therm...
158

a0dd25b2c   Len Brown   ACPI: thermal: bu...
159
  #endif /* __THERMAL_H__ */