Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
thermal.h
Go to the documentation of this file.
1
/*
2
* thermal.h ($Revision: 0 $)
3
*
4
* Copyright (C) 2008 Intel Corp
5
* Copyright (C) 2008 Zhang Rui <
[email protected]
>
6
* Copyright (C) 2008 Sujith Thomas <
[email protected]
>
7
*
8
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; version 2 of the License.
12
*
13
* This program is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License along
19
* with this program; if not, write to the Free Software Foundation, Inc.,
20
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
21
*
22
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23
*/
24
25
#ifndef __THERMAL_H__
26
#define __THERMAL_H__
27
28
#include <
linux/idr.h
>
29
#include <linux/device.h>
30
#include <
linux/workqueue.h
>
31
32
struct
thermal_zone_device
;
33
struct
thermal_cooling_device
;
34
35
enum
thermal_device_mode
{
36
THERMAL_DEVICE_DISABLED
= 0,
37
THERMAL_DEVICE_ENABLED
,
38
};
39
40
enum
thermal_trip_type
{
41
THERMAL_TRIP_ACTIVE
= 0,
42
THERMAL_TRIP_PASSIVE
,
43
THERMAL_TRIP_HOT
,
44
THERMAL_TRIP_CRITICAL
,
45
};
46
47
enum
thermal_trend
{
48
THERMAL_TREND_STABLE
,
/* temperature is stable */
49
THERMAL_TREND_RAISING
,
/* temperature is raising */
50
THERMAL_TREND_DROPPING
,
/* temperature is dropping */
51
};
52
53
struct
thermal_zone_device_ops
{
54
int
(*
bind
) (
struct
thermal_zone_device
*,
55
struct
thermal_cooling_device
*);
56
int
(*
unbind
) (
struct
thermal_zone_device
*,
57
struct
thermal_cooling_device
*);
58
int
(*
get_temp
) (
struct
thermal_zone_device
*,
unsigned
long
*);
59
int
(*
get_mode
) (
struct
thermal_zone_device
*,
60
enum
thermal_device_mode
*);
61
int
(*
set_mode
) (
struct
thermal_zone_device
*,
62
enum
thermal_device_mode
);
63
int
(*
get_trip_type
) (
struct
thermal_zone_device
*,
int
,
64
enum
thermal_trip_type
*);
65
int
(*
get_trip_temp
) (
struct
thermal_zone_device
*,
int
,
66
unsigned
long
*);
67
int
(*
set_trip_temp
) (
struct
thermal_zone_device
*,
int
,
68
unsigned
long
);
69
int
(*
get_trip_hyst
) (
struct
thermal_zone_device
*,
int
,
70
unsigned
long
*);
71
int
(*
set_trip_hyst
) (
struct
thermal_zone_device
*,
int
,
72
unsigned
long
);
73
int
(*
get_crit_temp
) (
struct
thermal_zone_device
*,
unsigned
long
*);
74
int
(*
get_trend
) (
struct
thermal_zone_device
*,
int
,
75
enum
thermal_trend
*);
76
int
(*
notify
) (
struct
thermal_zone_device
*,
int
,
77
enum
thermal_trip_type
);
78
};
79
80
struct
thermal_cooling_device_ops
{
81
int
(*
get_max_state
) (
struct
thermal_cooling_device
*,
unsigned
long
*);
82
int
(*
get_cur_state
) (
struct
thermal_cooling_device
*,
unsigned
long
*);
83
int
(*
set_cur_state
) (
struct
thermal_cooling_device
*,
unsigned
long
);
84
};
85
86
#define THERMAL_NO_LIMIT -1UL
/* no upper/lower limit requirement */
87
88
#define THERMAL_TRIPS_NONE -1
89
#define THERMAL_MAX_TRIPS 12
90
#define THERMAL_NAME_LENGTH 20
91
struct
thermal_cooling_device
{
92
int
id
;
93
char
type
[
THERMAL_NAME_LENGTH
];
94
struct
device
device
;
95
void
*
devdata
;
96
const
struct
thermal_cooling_device_ops
*
ops
;
97
bool
updated
;
/* true if the cooling device does not need update */
98
struct
mutex
lock
;
/* protect thermal_instances list */
99
struct
list_head
thermal_instances
;
100
struct
list_head
node
;
101
};
102
103
#define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \
104
((long)t-2732+5)/10 : ((long)t-2732-5)/10)
105
#define CELSIUS_TO_KELVIN(t) ((t)*10+2732)
106
107
struct
thermal_attr
{
108
struct
device_attribute
attr
;
109
char
name
[
THERMAL_NAME_LENGTH
];
110
};
111
112
struct
thermal_zone_device
{
113
int
id
;
114
char
type
[
THERMAL_NAME_LENGTH
];
115
struct
device
device
;
116
struct
thermal_attr
*
trip_temp_attrs
;
117
struct
thermal_attr
*
trip_type_attrs
;
118
struct
thermal_attr
*
trip_hyst_attrs
;
119
void
*
devdata
;
120
int
trips
;
121
int
passive_delay
;
122
int
polling_delay
;
123
int
temperature
;
124
int
last_temperature
;
125
int
passive
;
126
unsigned
int
forced_passive
;
127
const
struct
thermal_zone_device_ops
*
ops
;
128
struct
list_head
thermal_instances
;
129
struct
idr
idr
;
130
struct
mutex
lock
;
/* protect thermal_instances list */
131
struct
list_head
node
;
132
struct
delayed_work
poll_queue
;
133
};
134
/* Adding event notification support elements */
135
#define THERMAL_GENL_FAMILY_NAME "thermal_event"
136
#define THERMAL_GENL_VERSION 0x01
137
#define THERMAL_GENL_MCAST_GROUP_NAME "thermal_mc_group"
138
139
enum
events
{
140
THERMAL_AUX0
,
141
THERMAL_AUX1
,
142
THERMAL_CRITICAL
,
143
THERMAL_DEV_FAULT
,
144
};
145
146
struct
thermal_genl_event
{
147
u32
orig
;
148
enum
events
event
;
149
};
150
/* attributes of thermal_genl_family */
151
enum
{
152
THERMAL_GENL_ATTR_UNSPEC
,
153
THERMAL_GENL_ATTR_EVENT
,
154
__THERMAL_GENL_ATTR_MAX
,
155
};
156
#define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
157
158
/* commands supported by the thermal_genl_family */
159
enum
{
160
THERMAL_GENL_CMD_UNSPEC
,
161
THERMAL_GENL_CMD_EVENT
,
162
__THERMAL_GENL_CMD_MAX
,
163
};
164
#define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
165
166
struct
thermal_zone_device
*
thermal_zone_device_register
(
const
char
*,
int
,
int
,
167
void
*,
const
struct
thermal_zone_device_ops
*,
int
,
int
);
168
void
thermal_zone_device_unregister
(
struct
thermal_zone_device
*);
169
170
int
thermal_zone_bind_cooling_device
(
struct
thermal_zone_device
*,
int
,
171
struct
thermal_cooling_device
*,
172
unsigned
long
,
unsigned
long
);
173
int
thermal_zone_unbind_cooling_device
(
struct
thermal_zone_device
*,
int
,
174
struct
thermal_cooling_device
*);
175
void
thermal_zone_device_update
(
struct
thermal_zone_device
*);
176
struct
thermal_cooling_device
*
thermal_cooling_device_register
(
char
*,
void
*,
177
const
struct
thermal_cooling_device_ops
*);
178
void
thermal_cooling_device_unregister
(
struct
thermal_cooling_device
*);
179
180
#ifdef CONFIG_NET
181
extern
int
thermal_generate_netlink_event(
u32
orig,
enum
events
event
);
182
#else
183
static
inline
int
thermal_generate_netlink_event(
u32
orig,
enum
events
event
)
184
{
185
return
0;
186
}
187
#endif
188
189
#endif
/* __THERMAL_H__ */
Generated on Thu Jan 10 2013 14:52:41 for Linux Kernel by
1.8.2