summaryrefslogtreecommitdiff
path: root/qcom/qrtr/src/waiter.h
blob: e311453cb91a5fb43a902e145206d00700863301 (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#ifndef _WAITER_H_
#define _WAITER_H_

/** Waiter type. */
struct waiter;

/** Create a new waiter.
 * @return Newly created waiter on success, NULL on failure.
 */
struct waiter *waiter_create(void);

/** Destroy existing waiter.
 * @param w waiter to destroy.
 */
void waiter_destroy(struct waiter *w);

/** Wait for next ticket.
 * @param w waiter.
 */
void waiter_wait(struct waiter *w);

/** Wait for next ticket or timeout.
 * @param w waiter.
 * @param ms timeout in milliseconds.
 * @return 0 on ticket; !0 on timeout.
 */
int waiter_wait_timeout(struct waiter *w, unsigned int ms);

/** Synchronize timer-based tickets.
 * @param w waiter.
 */
void waiter_synchronize(struct waiter *w);

/** Waiter ticket type. */
struct waiter_ticket;

/** Add a null wait ticket to pool.
 * @param w waiter
 * @return wait ticket on success; NULL on failure.
 */
struct waiter_ticket *waiter_add_null(struct waiter *w);

/** Add a file descriptor to the pool.
 * @param w waiter.
 * @param fd file descriptor.
 * @return wait ticket on success; NULL on failure.
 */
struct waiter_ticket *waiter_add_fd(struct waiter *w, int fd);

/** Add a timeout to the pool.
 * @param w waiter.
 * @param ms duration of timeout in milliseconds.
 * @return wait ticket on success; NULL on failure.
 */
struct waiter_ticket *waiter_add_timeout(struct waiter *w, unsigned int ms);

/** Set ticket type to null.
 * @param tkt wait ticket.
 */
void waiter_ticket_set_null(struct waiter_ticket *tkt);

/** Set ticket type to file descriptor.
 * @param tkt wait ticket.
 * @param fd file descriptor.
 */
void waiter_ticket_set_fd(struct waiter_ticket *tkt, int fd);

/** Set ticket type to timeout.
 * @param tkt wait ticket.
 * @param ms timeout in milliseconds.
 */
void waiter_ticket_set_timeout(struct waiter_ticket *tkt, unsigned int ms);

/** Destroy ticket.
 * @param tkt wait ticket.
 */
void waiter_ticket_delete(struct waiter_ticket *tkt);

/** Check to see if ticket has triggered.
 * @param tkt wait ticket.
 * @return 0 if triggered, !0 otherwise.
 */
int waiter_ticket_check(const struct waiter_ticket *tkt);


/** Clear ticket trigger status.
 * @param tkt wait ticket.
 * @return 0 if triggered, !0 otherwise.
 */
int waiter_ticket_clear(struct waiter_ticket *tkt);

/** Wait ticket callback function type. */
typedef void (* waiter_ticket_cb_t)(void *, struct waiter_ticket *);

/** Register callback function for ticket trigger.
 * @param tkt wait ticket.
 * @param cb_fn callback function.
 * @param data private data to pass to callback function.
 */
void waiter_ticket_callback(struct waiter_ticket *tkt,
		waiter_ticket_cb_t cb_fn, void *data);

#endif