]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/linux/reset.h
mm, oom_reaper: do not attempt to reap a task more than twice
[mirror_ubuntu-artful-kernel.git] / include / linux / reset.h
CommitLineData
61fc4131
PZ
1#ifndef _LINUX_RESET_H_
2#define _LINUX_RESET_H_
3
6c96f05c
HG
4#include <linux/device.h>
5
61fc4131
PZ
6struct reset_control;
7
b424080a
PZ
8#ifdef CONFIG_RESET_CONTROLLER
9
61fc4131
PZ
10int reset_control_reset(struct reset_control *rstc);
11int reset_control_assert(struct reset_control *rstc);
12int reset_control_deassert(struct reset_control *rstc);
729de41b 13int reset_control_status(struct reset_control *rstc);
61fc4131 14
6c96f05c 15struct reset_control *__of_reset_control_get(struct device_node *node,
0b52297f 16 const char *id, int index, int shared);
61fc4131 17void reset_control_put(struct reset_control *rstc);
6c96f05c 18struct reset_control *__devm_reset_control_get(struct device *dev,
0b52297f 19 const char *id, int index, int shared);
61fc4131 20
b424080a
PZ
21int __must_check device_reset(struct device *dev);
22
23static inline int device_reset_optional(struct device *dev)
24{
25 return device_reset(dev);
26}
27
b424080a
PZ
28#else
29
30static inline int reset_control_reset(struct reset_control *rstc)
31{
32 WARN_ON(1);
33 return 0;
34}
35
36static inline int reset_control_assert(struct reset_control *rstc)
37{
38 WARN_ON(1);
39 return 0;
40}
41
42static inline int reset_control_deassert(struct reset_control *rstc)
43{
44 WARN_ON(1);
45 return 0;
46}
47
729de41b
DN
48static inline int reset_control_status(struct reset_control *rstc)
49{
50 WARN_ON(1);
51 return 0;
52}
53
b424080a
PZ
54static inline void reset_control_put(struct reset_control *rstc)
55{
56 WARN_ON(1);
57}
58
41136522
DL
59static inline int __must_check device_reset(struct device *dev)
60{
61 WARN_ON(1);
62 return -ENOTSUPP;
63}
64
b424080a
PZ
65static inline int device_reset_optional(struct device *dev)
66{
39b4da71 67 return -ENOTSUPP;
b424080a
PZ
68}
69
6c96f05c
HG
70static inline struct reset_control *__of_reset_control_get(
71 struct device_node *node,
0b52297f 72 const char *id, int index, int shared)
5bcd0b7f 73{
5bcd0b7f
AL
74 return ERR_PTR(-EINVAL);
75}
76
6c96f05c
HG
77static inline struct reset_control *__devm_reset_control_get(
78 struct device *dev,
0b52297f 79 const char *id, int index, int shared)
5bcd0b7f 80{
5bcd0b7f
AL
81 return ERR_PTR(-EINVAL);
82}
83
6c96f05c
HG
84#endif /* CONFIG_RESET_CONTROLLER */
85
86/**
a53e35db
LJ
87 * reset_control_get_exclusive - Lookup and obtain an exclusive reference
88 * to a reset controller.
6c96f05c
HG
89 * @dev: device to be reset by the controller
90 * @id: reset line name
91 *
92 * Returns a struct reset_control or IS_ERR() condition containing errno.
0b52297f
HG
93 * If this function is called more then once for the same reset_control it will
94 * return -EBUSY.
95 *
96 * See reset_control_get_shared for details on shared references to
97 * reset-controls.
6c96f05c
HG
98 *
99 * Use of id names is optional.
100 */
a53e35db
LJ
101static inline struct reset_control *
102__must_check reset_control_get_exclusive(struct device *dev, const char *id)
b424080a 103{
6c96f05c
HG
104#ifndef CONFIG_RESET_CONTROLLER
105 WARN_ON(1);
106#endif
0b52297f 107 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 0);
b424080a
PZ
108}
109
6c96f05c 110/**
0b52297f
HG
111 * reset_control_get_shared - Lookup and obtain a shared reference to a
112 * reset controller.
113 * @dev: device to be reset by the controller
114 * @id: reset line name
115 *
116 * Returns a struct reset_control or IS_ERR() condition containing errno.
117 * This function is intended for use with reset-controls which are shared
118 * between hardware-blocks.
119 *
120 * When a reset-control is shared, the behavior of reset_control_assert /
121 * deassert is changed, the reset-core will keep track of a deassert_count
122 * and only (re-)assert the reset after reset_control_assert has been called
123 * as many times as reset_control_deassert was called. Also see the remark
124 * about shared reset-controls in the reset_control_assert docs.
125 *
126 * Calling reset_control_assert without first calling reset_control_deassert
127 * is not allowed on a shared reset control. Calling reset_control_reset is
128 * also not allowed on a shared reset control.
129 *
130 * Use of id names is optional.
131 */
132static inline struct reset_control *reset_control_get_shared(
133 struct device *dev, const char *id)
134{
135 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 1);
136}
137
a53e35db 138static inline struct reset_control *reset_control_get_optional_exclusive(
3c35f6ed
LJ
139 struct device *dev, const char *id)
140{
141 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 0);
142}
143
c33d61a0
LJ
144static inline struct reset_control *reset_control_get_optional_shared(
145 struct device *dev, const char *id)
146{
147 return __of_reset_control_get(dev ? dev->of_node : NULL, id, 0, 1);
148}
149
0b52297f 150/**
a53e35db
LJ
151 * of_reset_control_get_exclusive - Lookup and obtain an exclusive reference
152 * to a reset controller.
6c96f05c
HG
153 * @node: device to be reset by the controller
154 * @id: reset line name
155 *
156 * Returns a struct reset_control or IS_ERR() condition containing errno.
157 *
158 * Use of id names is optional.
159 */
a53e35db 160static inline struct reset_control *of_reset_control_get_exclusive(
e3ec0a8c
HG
161 struct device_node *node, const char *id)
162{
0b52297f 163 return __of_reset_control_get(node, id, 0, 0);
e3ec0a8c
HG
164}
165
40faee8e
LJ
166/**
167 * of_reset_control_get_shared - Lookup and obtain an shared reference
168 * to a reset controller.
169 * @node: device to be reset by the controller
170 * @id: reset line name
171 *
172 * When a reset-control is shared, the behavior of reset_control_assert /
173 * deassert is changed, the reset-core will keep track of a deassert_count
174 * and only (re-)assert the reset after reset_control_assert has been called
175 * as many times as reset_control_deassert was called. Also see the remark
176 * about shared reset-controls in the reset_control_assert docs.
177 *
178 * Calling reset_control_assert without first calling reset_control_deassert
179 * is not allowed on a shared reset control. Calling reset_control_reset is
180 * also not allowed on a shared reset control.
181 * Returns a struct reset_control or IS_ERR() condition containing errno.
182 *
183 * Use of id names is optional.
184 */
185static inline struct reset_control *of_reset_control_get_shared(
186 struct device_node *node, const char *id)
187{
188 return __of_reset_control_get(node, id, 0, 1);
189}
190
6c96f05c 191/**
a53e35db
LJ
192 * of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive
193 * reference to a reset controller
194 * by index.
6c96f05c
HG
195 * @node: device to be reset by the controller
196 * @index: index of the reset controller
197 *
198 * This is to be used to perform a list of resets for a device or power domain
199 * in whatever order. Returns a struct reset_control or IS_ERR() condition
200 * containing errno.
201 */
a53e35db 202static inline struct reset_control *of_reset_control_get_exclusive_by_index(
6c96f05c 203 struct device_node *node, int index)
c0a13aa6 204{
0b52297f 205 return __of_reset_control_get(node, NULL, index, 0);
c0a13aa6
VH
206}
207
40faee8e
LJ
208/**
209 * of_reset_control_get_shared_by_index - Lookup and obtain an shared
210 * reference to a reset controller
211 * by index.
212 * @node: device to be reset by the controller
213 * @index: index of the reset controller
214 *
215 * When a reset-control is shared, the behavior of reset_control_assert /
216 * deassert is changed, the reset-core will keep track of a deassert_count
217 * and only (re-)assert the reset after reset_control_assert has been called
218 * as many times as reset_control_deassert was called. Also see the remark
219 * about shared reset-controls in the reset_control_assert docs.
220 *
221 * Calling reset_control_assert without first calling reset_control_deassert
222 * is not allowed on a shared reset control. Calling reset_control_reset is
223 * also not allowed on a shared reset control.
224 * Returns a struct reset_control or IS_ERR() condition containing errno.
225 *
226 * This is to be used to perform a list of resets for a device or power domain
227 * in whatever order. Returns a struct reset_control or IS_ERR() condition
228 * containing errno.
229 */
230static inline struct reset_control *of_reset_control_get_shared_by_index(
231 struct device_node *node, int index)
232{
233 return __of_reset_control_get(node, NULL, index, 1);
234}
235
6c96f05c 236/**
a53e35db
LJ
237 * devm_reset_control_get_exclusive - resource managed
238 * reset_control_get_exclusive()
6c96f05c
HG
239 * @dev: device to be reset by the controller
240 * @id: reset line name
241 *
a53e35db
LJ
242 * Managed reset_control_get_exclusive(). For reset controllers returned
243 * from this function, reset_control_put() is called automatically on driver
244 * detach.
245 *
246 * See reset_control_get_exclusive() for more information.
6c96f05c 247 */
a53e35db
LJ
248static inline struct reset_control *
249__must_check devm_reset_control_get_exclusive(struct device *dev,
250 const char *id)
6c96f05c
HG
251{
252#ifndef CONFIG_RESET_CONTROLLER
253 WARN_ON(1);
254#endif
0b52297f 255 return __devm_reset_control_get(dev, id, 0, 0);
6c96f05c
HG
256}
257
3c35f6ed
LJ
258/**
259 * devm_reset_control_get_shared - resource managed reset_control_get_shared()
260 * @dev: device to be reset by the controller
261 * @id: reset line name
262 *
263 * Managed reset_control_get_shared(). For reset controllers returned from
264 * this function, reset_control_put() is called automatically on driver detach.
265 * See reset_control_get_shared() for more information.
266 */
267static inline struct reset_control *devm_reset_control_get_shared(
268 struct device *dev, const char *id)
269{
270 return __devm_reset_control_get(dev, id, 0, 1);
271}
272
a53e35db 273static inline struct reset_control *devm_reset_control_get_optional_exclusive(
6c96f05c
HG
274 struct device *dev, const char *id)
275{
0b52297f 276 return __devm_reset_control_get(dev, id, 0, 0);
6c96f05c
HG
277}
278
c33d61a0
LJ
279static inline struct reset_control *devm_reset_control_get_optional_shared(
280 struct device *dev, const char *id)
281{
282 return __devm_reset_control_get(dev, id, 0, 1);
283}
284
6c96f05c 285/**
a53e35db
LJ
286 * devm_reset_control_get_exclusive_by_index - resource managed
287 * reset_control_get_exclusive()
6c96f05c
HG
288 * @dev: device to be reset by the controller
289 * @index: index of the reset controller
290 *
a53e35db
LJ
291 * Managed reset_control_get_exclusive(). For reset controllers returned from
292 * this function, reset_control_put() is called automatically on driver
293 * detach.
294 *
295 * See reset_control_get_exclusive() for more information.
6c96f05c 296 */
a53e35db
LJ
297static inline struct reset_control *
298devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
6c96f05c 299{
0b52297f
HG
300 return __devm_reset_control_get(dev, NULL, index, 0);
301}
302
0b52297f
HG
303/**
304 * devm_reset_control_get_shared_by_index - resource managed
305 * reset_control_get_shared
306 * @dev: device to be reset by the controller
307 * @index: index of the reset controller
308 *
309 * Managed reset_control_get_shared(). For reset controllers returned from
310 * this function, reset_control_put() is called automatically on driver detach.
311 * See reset_control_get_shared() for more information.
312 */
0bcc0eab
LJ
313static inline struct reset_control *
314devm_reset_control_get_shared_by_index(struct device *dev, int index)
0b52297f
HG
315{
316 return __devm_reset_control_get(dev, NULL, index, 1);
6c96f05c 317}
61fc4131 318
a53e35db
LJ
319/*
320 * TEMPORARY calls to use during transition:
321 *
322 * of_reset_control_get() => of_reset_control_get_exclusive()
323 *
324 * These inline function calls will be removed once all consumers
325 * have been moved over to the new explicit API.
326 */
327static inline struct reset_control *reset_control_get(
328 struct device *dev, const char *id)
329{
330 return reset_control_get_exclusive(dev, id);
331}
332
333static inline struct reset_control *reset_control_get_optional(
334 struct device *dev, const char *id)
335{
336 return reset_control_get_optional_exclusive(dev, id);
337}
338
339static inline struct reset_control *of_reset_control_get(
340 struct device_node *node, const char *id)
341{
342 return of_reset_control_get_exclusive(node, id);
343}
344
345static inline struct reset_control *of_reset_control_get_by_index(
346 struct device_node *node, int index)
347{
348 return of_reset_control_get_exclusive_by_index(node, index);
349}
350
351static inline struct reset_control *devm_reset_control_get(
352 struct device *dev, const char *id)
353{
354 return devm_reset_control_get_exclusive(dev, id);
355}
356
357static inline struct reset_control *devm_reset_control_get_optional(
358 struct device *dev, const char *id)
359{
360 return devm_reset_control_get_optional_exclusive(dev, id);
361
362}
363
364static inline struct reset_control *devm_reset_control_get_by_index(
365 struct device *dev, int index)
366{
367 return devm_reset_control_get_exclusive_by_index(dev, index);
368}
61fc4131 369#endif