aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/intel-ish-hid/ipc/utils.h
blob: 5a82123dc7b4ee4d983ddc373080e92241bdd547 (plain) (blame)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * Utility macros of ISH
 *
 * Copyright (c) 2014-2016, Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope 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.
 */
#ifndef UTILS__H
#define UTILS__H

#define	WAIT_FOR_SEND_SLICE	(HZ / 10)
#define	WAIT_FOR_CONNECT_SLICE	(HZ / 10)

/*
 * Waits for specified event when a thread that triggers event can't signal
 * Also, waits *at_least* `timeinc` after condition is satisfied
 */
#define	timed_wait_for(timeinc, condition)			\
	do {							\
		int completed = 0;				\
		do {						\
			unsigned long	j;			\
			int	done = 0;			\
								\
			completed = (condition);		\
			for (j = jiffies, done = 0; !done; ) {	\
				schedule_timeout(timeinc);	\
				if (time_is_before_eq_jiffies(j + timeinc)) \
					done = 1;		\
			}					\
		} while (!(completed));				\
	} while (0)


/*
 * Waits for specified event when a thread that triggers event
 * can't signal with timeout (use whenever we may hang)
 */
#define	timed_wait_for_timeout(timeinc, condition, timeout)	\
	do {							\
		int	t = timeout;				\
		do {						\
			unsigned long	j;			\
			int	done = 0;			\
								\
			for (j = jiffies, done = 0; !done; ) {	\
				schedule_timeout(timeinc);	\
				if (time_is_before_eq_jiffies(j + timeinc)) \
					done = 1;		\
			} \
			t -= timeinc;				\
			if (t <= 0)				\
				break;				\
		} while (!(condition));				\
	} while (0)

#endif /* UTILS__H */