diff options
Diffstat (limited to 'qcom/qrtr/src/waiter.h')
-rw-r--r-- | qcom/qrtr/src/waiter.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/qcom/qrtr/src/waiter.h b/qcom/qrtr/src/waiter.h new file mode 100644 index 0000000..e311453 --- /dev/null +++ b/qcom/qrtr/src/waiter.h @@ -0,0 +1,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 |