• Home
  • Raw
  • Download

Lines Matching refs:ctx

1132 int usbi_io_init(struct libusb_context *ctx)  in usbi_io_init()  argument
1136 usbi_mutex_init(&ctx->flying_transfers_lock, NULL); in usbi_io_init()
1137 usbi_mutex_init(&ctx->pollfds_lock, NULL); in usbi_io_init()
1138 usbi_mutex_init(&ctx->pollfd_modify_lock, NULL); in usbi_io_init()
1139 usbi_mutex_init_recursive(&ctx->events_lock, NULL); in usbi_io_init()
1140 usbi_mutex_init(&ctx->event_waiters_lock, NULL); in usbi_io_init()
1141 usbi_cond_init(&ctx->event_waiters_cond, NULL); in usbi_io_init()
1142 list_init(&ctx->flying_transfers); in usbi_io_init()
1143 list_init(&ctx->pollfds); in usbi_io_init()
1146 r = usbi_pipe(ctx->ctrl_pipe); in usbi_io_init()
1152 r = usbi_add_pollfd(ctx, ctx->ctrl_pipe[0], POLLIN); in usbi_io_init()
1157 ctx->timerfd = timerfd_create(usbi_backend->get_timerfd_clockid(), in usbi_io_init()
1159 if (ctx->timerfd >= 0) { in usbi_io_init()
1161 r = usbi_add_pollfd(ctx, ctx->timerfd, POLLIN); in usbi_io_init()
1163 usbi_remove_pollfd(ctx, ctx->ctrl_pipe[0]); in usbi_io_init()
1164 close(ctx->timerfd); in usbi_io_init()
1168 usbi_dbg("timerfd not available (code %d error %d)", ctx->timerfd, errno); in usbi_io_init()
1169 ctx->timerfd = -1; in usbi_io_init()
1176 usbi_close(ctx->ctrl_pipe[0]); in usbi_io_init()
1177 usbi_close(ctx->ctrl_pipe[1]); in usbi_io_init()
1179 usbi_mutex_destroy(&ctx->flying_transfers_lock); in usbi_io_init()
1180 usbi_mutex_destroy(&ctx->pollfds_lock); in usbi_io_init()
1181 usbi_mutex_destroy(&ctx->pollfd_modify_lock); in usbi_io_init()
1182 usbi_mutex_destroy(&ctx->events_lock); in usbi_io_init()
1183 usbi_mutex_destroy(&ctx->event_waiters_lock); in usbi_io_init()
1184 usbi_cond_destroy(&ctx->event_waiters_cond); in usbi_io_init()
1188 void usbi_io_exit(struct libusb_context *ctx) in usbi_io_exit() argument
1190 usbi_remove_pollfd(ctx, ctx->ctrl_pipe[0]); in usbi_io_exit()
1191 usbi_close(ctx->ctrl_pipe[0]); in usbi_io_exit()
1192 usbi_close(ctx->ctrl_pipe[1]); in usbi_io_exit()
1194 if (usbi_using_timerfd(ctx)) { in usbi_io_exit()
1195 usbi_remove_pollfd(ctx, ctx->timerfd); in usbi_io_exit()
1196 close(ctx->timerfd); in usbi_io_exit()
1199 usbi_mutex_destroy(&ctx->flying_transfers_lock); in usbi_io_exit()
1200 usbi_mutex_destroy(&ctx->pollfds_lock); in usbi_io_exit()
1201 usbi_mutex_destroy(&ctx->pollfd_modify_lock); in usbi_io_exit()
1202 usbi_mutex_destroy(&ctx->events_lock); in usbi_io_exit()
1203 usbi_mutex_destroy(&ctx->event_waiters_lock); in usbi_io_exit()
1204 usbi_cond_destroy(&ctx->event_waiters_cond); in usbi_io_exit()
1243 struct libusb_context *ctx = ITRANSFER_CTX(transfer); in add_to_flying_list() local
1247 usbi_mutex_lock(&ctx->flying_transfers_lock); in add_to_flying_list()
1250 if (list_empty(&ctx->flying_transfers)) { in add_to_flying_list()
1251 list_add(&transfer->list, &ctx->flying_transfers); in add_to_flying_list()
1259 list_add_tail(&transfer->list, &ctx->flying_transfers); in add_to_flying_list()
1264 list_for_each_entry(cur, &ctx->flying_transfers, list, struct usbi_transfer) { in add_to_flying_list()
1279 list_add_tail(&transfer->list, &ctx->flying_transfers); in add_to_flying_list()
1281 usbi_mutex_unlock(&ctx->flying_transfers_lock); in add_to_flying_list()
1373 struct libusb_context *ctx = TRANSFER_CTX(transfer); in libusb_submit_transfer() local
1391 usbi_mutex_lock(&ctx->flying_transfers_lock); in libusb_submit_transfer()
1393 usbi_mutex_unlock(&ctx->flying_transfers_lock); in libusb_submit_transfer()
1396 else if (first && usbi_using_timerfd(ctx)) { in libusb_submit_transfer()
1402 r = timerfd_settime(ctx->timerfd, TFD_TIMER_ABSTIME, &it, NULL); in libusb_submit_transfer()
1456 static int disarm_timerfd(struct libusb_context *ctx) in disarm_timerfd() argument
1462 r = timerfd_settime(ctx->timerfd, 0, &disarm_timer, NULL); in disarm_timerfd()
1475 static int arm_timerfd_for_next_timeout(struct libusb_context *ctx) in arm_timerfd_for_next_timeout() argument
1479 list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { in arm_timerfd_for_next_timeout()
1493 r = timerfd_settime(ctx->timerfd, TFD_TIMER_ABSTIME, &it, NULL); in arm_timerfd_for_next_timeout()
1503 static int disarm_timerfd(struct libusb_context *ctx) in disarm_timerfd() argument
1505 (void)ctx; in disarm_timerfd()
1508 static int arm_timerfd_for_next_timeout(struct libusb_context *ctx) in arm_timerfd_for_next_timeout() argument
1510 (void)ctx; in arm_timerfd_for_next_timeout()
1528 struct libusb_context *ctx = TRANSFER_CTX(transfer); in usbi_handle_transfer_completion() local
1537 usbi_mutex_lock(&ctx->flying_transfers_lock); in usbi_handle_transfer_completion()
1539 if (usbi_using_timerfd(ctx)) in usbi_handle_transfer_completion()
1540 r = arm_timerfd_for_next_timeout(ctx); in usbi_handle_transfer_completion()
1541 usbi_mutex_unlock(&ctx->flying_transfers_lock); in usbi_handle_transfer_completion()
1543 if (usbi_using_timerfd(ctx)) { in usbi_handle_transfer_completion()
1546 r = disarm_timerfd(ctx); in usbi_handle_transfer_completion()
1572 usbi_mutex_lock(&ctx->event_waiters_lock); in usbi_handle_transfer_completion()
1573 usbi_cond_broadcast(&ctx->event_waiters_cond); in usbi_handle_transfer_completion()
1574 usbi_mutex_unlock(&ctx->event_waiters_lock); in usbi_handle_transfer_completion()
1615 int API_EXPORTED libusb_try_lock_events(libusb_context *ctx) in libusb_try_lock_events() argument
1618 USBI_GET_CONTEXT(ctx); in libusb_try_lock_events()
1622 usbi_mutex_lock(&ctx->pollfd_modify_lock); in libusb_try_lock_events()
1623 r = ctx->pollfd_modify; in libusb_try_lock_events()
1624 usbi_mutex_unlock(&ctx->pollfd_modify_lock); in libusb_try_lock_events()
1630 r = usbi_mutex_trylock(&ctx->events_lock); in libusb_try_lock_events()
1634 ctx->event_handler_active = 1; in libusb_try_lock_events()
1656 void API_EXPORTED libusb_lock_events(libusb_context *ctx) in libusb_lock_events() argument
1658 USBI_GET_CONTEXT(ctx); in libusb_lock_events()
1659 usbi_mutex_lock(&ctx->events_lock); in libusb_lock_events()
1660 ctx->event_handler_active = 1; in libusb_lock_events()
1671 void API_EXPORTED libusb_unlock_events(libusb_context *ctx) in libusb_unlock_events() argument
1673 USBI_GET_CONTEXT(ctx); in libusb_unlock_events()
1674 ctx->event_handler_active = 0; in libusb_unlock_events()
1675 usbi_mutex_unlock(&ctx->events_lock); in libusb_unlock_events()
1680 usbi_mutex_lock(&ctx->event_waiters_lock); in libusb_unlock_events()
1681 usbi_cond_broadcast(&ctx->event_waiters_cond); in libusb_unlock_events()
1682 usbi_mutex_unlock(&ctx->event_waiters_lock); in libusb_unlock_events()
1706 int API_EXPORTED libusb_event_handling_ok(libusb_context *ctx) in libusb_event_handling_ok() argument
1709 USBI_GET_CONTEXT(ctx); in libusb_event_handling_ok()
1713 usbi_mutex_lock(&ctx->pollfd_modify_lock); in libusb_event_handling_ok()
1714 r = ctx->pollfd_modify; in libusb_event_handling_ok()
1715 usbi_mutex_unlock(&ctx->pollfd_modify_lock); in libusb_event_handling_ok()
1734 int API_EXPORTED libusb_event_handler_active(libusb_context *ctx) in libusb_event_handler_active() argument
1737 USBI_GET_CONTEXT(ctx); in libusb_event_handler_active()
1741 usbi_mutex_lock(&ctx->pollfd_modify_lock); in libusb_event_handler_active()
1742 r = ctx->pollfd_modify; in libusb_event_handler_active()
1743 usbi_mutex_unlock(&ctx->pollfd_modify_lock); in libusb_event_handler_active()
1749 return ctx->event_handler_active; in libusb_event_handler_active()
1771 void API_EXPORTED libusb_lock_event_waiters(libusb_context *ctx) in libusb_lock_event_waiters() argument
1773 USBI_GET_CONTEXT(ctx); in libusb_lock_event_waiters()
1774 usbi_mutex_lock(&ctx->event_waiters_lock); in libusb_lock_event_waiters()
1782 void API_EXPORTED libusb_unlock_event_waiters(libusb_context *ctx) in libusb_unlock_event_waiters() argument
1784 USBI_GET_CONTEXT(ctx); in libusb_unlock_event_waiters()
1785 usbi_mutex_unlock(&ctx->event_waiters_lock); in libusb_unlock_event_waiters()
1813 int API_EXPORTED libusb_wait_for_event(libusb_context *ctx, struct timeval *tv) in libusb_wait_for_event() argument
1818 USBI_GET_CONTEXT(ctx); in libusb_wait_for_event()
1820 usbi_cond_wait(&ctx->event_waiters_cond, &ctx->event_waiters_lock); in libusb_wait_for_event()
1826 usbi_err(ctx, "failed to read realtime clock, error %d", errno); in libusb_wait_for_event()
1837 r = usbi_cond_timedwait(&ctx->event_waiters_cond, in libusb_wait_for_event()
1838 &ctx->event_waiters_lock, &timeout); in libusb_wait_for_event()
1855 static int handle_timeouts_locked(struct libusb_context *ctx) in handle_timeouts_locked() argument
1862 if (list_empty(&ctx->flying_transfers)) in handle_timeouts_locked()
1874 list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { in handle_timeouts_locked()
1897 static int handle_timeouts(struct libusb_context *ctx) in handle_timeouts() argument
1900 USBI_GET_CONTEXT(ctx); in handle_timeouts()
1901 usbi_mutex_lock(&ctx->flying_transfers_lock); in handle_timeouts()
1902 r = handle_timeouts_locked(ctx); in handle_timeouts()
1903 usbi_mutex_unlock(&ctx->flying_transfers_lock); in handle_timeouts()
1908 static int handle_timerfd_trigger(struct libusb_context *ctx) in handle_timerfd_trigger() argument
1912 r = disarm_timerfd(ctx); in handle_timerfd_trigger()
1916 usbi_mutex_lock(&ctx->flying_transfers_lock); in handle_timerfd_trigger()
1919 r = handle_timeouts_locked(ctx); in handle_timerfd_trigger()
1924 r = arm_timerfd_for_next_timeout(ctx); in handle_timerfd_trigger()
1927 usbi_mutex_unlock(&ctx->flying_transfers_lock); in handle_timerfd_trigger()
1934 static int handle_events(struct libusb_context *ctx, struct timeval *tv) in handle_events() argument
1943 usbi_mutex_lock(&ctx->pollfds_lock); in handle_events()
1944 list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) in handle_events()
1950 usbi_mutex_unlock(&ctx->pollfds_lock); in handle_events()
1954 list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) { in handle_events()
1962 usbi_mutex_unlock(&ctx->pollfds_lock); in handle_events()
1975 return handle_timeouts(ctx); in handle_events()
1981 usbi_err(ctx, "poll failed %d err=%d\n", r, errno); in handle_events()
2004 if (usbi_using_timerfd(ctx) && fds[1].revents) { in handle_events()
2009 ret = handle_timerfd_trigger(ctx); in handle_events()
2027 r = usbi_backend->handle_events(ctx, fds, nfds, r); in handle_events()
2029 usbi_err(ctx, "backend handle_events failed with error %d", r); in handle_events()
2042 static int get_next_timeout(libusb_context *ctx, struct timeval *tv, in get_next_timeout() argument
2046 int r = libusb_get_next_timeout(ctx, &timeout); in get_next_timeout()
2089 int API_EXPORTED libusb_handle_events_timeout_completed(libusb_context *ctx, in libusb_handle_events_timeout_completed() argument
2095 USBI_GET_CONTEXT(ctx); in libusb_handle_events_timeout_completed()
2096 r = get_next_timeout(ctx, tv, &poll_timeout); in libusb_handle_events_timeout_completed()
2099 return handle_timeouts(ctx); in libusb_handle_events_timeout_completed()
2103 if (libusb_try_lock_events(ctx) == 0) { in libusb_handle_events_timeout_completed()
2107 r = handle_events(ctx, &poll_timeout); in libusb_handle_events_timeout_completed()
2109 libusb_unlock_events(ctx); in libusb_handle_events_timeout_completed()
2115 libusb_lock_event_waiters(ctx); in libusb_handle_events_timeout_completed()
2120 if (!libusb_event_handler_active(ctx)) { in libusb_handle_events_timeout_completed()
2123 libusb_unlock_event_waiters(ctx); in libusb_handle_events_timeout_completed()
2129 r = libusb_wait_for_event(ctx, &poll_timeout); in libusb_handle_events_timeout_completed()
2132 libusb_unlock_event_waiters(ctx); in libusb_handle_events_timeout_completed()
2137 return handle_timeouts(ctx); in libusb_handle_events_timeout_completed()
2158 int API_EXPORTED libusb_handle_events_timeout(libusb_context *ctx, in libusb_handle_events_timeout() argument
2161 return libusb_handle_events_timeout_completed(ctx, tv, NULL); in libusb_handle_events_timeout()
2178 int API_EXPORTED libusb_handle_events(libusb_context *ctx) in libusb_handle_events() argument
2183 return libusb_handle_events_timeout_completed(ctx, &tv, NULL); in libusb_handle_events()
2200 int API_EXPORTED libusb_handle_events_completed(libusb_context *ctx, in libusb_handle_events_completed() argument
2206 return libusb_handle_events_timeout_completed(ctx, &tv, completed); in libusb_handle_events_completed()
2226 int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx, in libusb_handle_events_locked() argument
2232 USBI_GET_CONTEXT(ctx); in libusb_handle_events_locked()
2233 r = get_next_timeout(ctx, tv, &poll_timeout); in libusb_handle_events_locked()
2236 return handle_timeouts(ctx); in libusb_handle_events_locked()
2239 return handle_events(ctx, &poll_timeout); in libusb_handle_events_locked()
2270 int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx) in libusb_pollfds_handle_timeouts() argument
2273 USBI_GET_CONTEXT(ctx); in libusb_pollfds_handle_timeouts()
2274 return usbi_using_timerfd(ctx); in libusb_pollfds_handle_timeouts()
2276 (void)ctx; in libusb_pollfds_handle_timeouts()
2309 int API_EXPORTED libusb_get_next_timeout(libusb_context *ctx, in libusb_get_next_timeout() argument
2319 USBI_GET_CONTEXT(ctx); in libusb_get_next_timeout()
2320 if (usbi_using_timerfd(ctx)) in libusb_get_next_timeout()
2323 usbi_mutex_lock(&ctx->flying_transfers_lock); in libusb_get_next_timeout()
2324 if (list_empty(&ctx->flying_transfers)) { in libusb_get_next_timeout()
2325 usbi_mutex_unlock(&ctx->flying_transfers_lock); in libusb_get_next_timeout()
2331 list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { in libusb_get_next_timeout()
2342 usbi_mutex_unlock(&ctx->flying_transfers_lock); in libusb_get_next_timeout()
2353 usbi_err(ctx, "failed to read monotonic clock, errno=%d", errno); in libusb_get_next_timeout()
2390 void API_EXPORTED libusb_set_pollfd_notifiers(libusb_context *ctx, in libusb_set_pollfd_notifiers() argument
2394 USBI_GET_CONTEXT(ctx); in libusb_set_pollfd_notifiers()
2395 ctx->fd_added_cb = added_cb; in libusb_set_pollfd_notifiers()
2396 ctx->fd_removed_cb = removed_cb; in libusb_set_pollfd_notifiers()
2397 ctx->fd_cb_user_data = user_data; in libusb_set_pollfd_notifiers()
2403 int usbi_add_pollfd(struct libusb_context *ctx, int fd, short events) in usbi_add_pollfd() argument
2412 usbi_mutex_lock(&ctx->pollfds_lock); in usbi_add_pollfd()
2413 list_add_tail(&ipollfd->list, &ctx->pollfds); in usbi_add_pollfd()
2414 usbi_mutex_unlock(&ctx->pollfds_lock); in usbi_add_pollfd()
2416 if (ctx->fd_added_cb) in usbi_add_pollfd()
2417 ctx->fd_added_cb(fd, events, ctx->fd_cb_user_data); in usbi_add_pollfd()
2422 void usbi_remove_pollfd(struct libusb_context *ctx, int fd) in usbi_remove_pollfd() argument
2428 usbi_mutex_lock(&ctx->pollfds_lock); in usbi_remove_pollfd()
2429 list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) in usbi_remove_pollfd()
2437 usbi_mutex_unlock(&ctx->pollfds_lock); in usbi_remove_pollfd()
2442 usbi_mutex_unlock(&ctx->pollfds_lock); in usbi_remove_pollfd()
2444 if (ctx->fd_removed_cb) in usbi_remove_pollfd()
2445 ctx->fd_removed_cb(fd, ctx->fd_cb_user_data); in usbi_remove_pollfd()
2465 libusb_context *ctx) in libusb_get_pollfds() argument
2472 USBI_GET_CONTEXT(ctx); in libusb_get_pollfds()
2474 usbi_mutex_lock(&ctx->pollfds_lock); in libusb_get_pollfds()
2475 list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) in libusb_get_pollfds()
2482 list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) in libusb_get_pollfds()
2487 usbi_mutex_unlock(&ctx->pollfds_lock); in libusb_get_pollfds()
2490 usbi_err(ctx, "external polling of libusb's internal descriptors "\ in libusb_get_pollfds()