PERFORCE change 162214 for review
Sylvestre Gallon
syl at FreeBSD.org
Sun May 17 15:27:42 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=162214
Change 162214 by syl at syl_atuin on 2009/05/17 15:27:04
Add default context handling
Affected files ...
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#12 edit
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_desc.c#9 edit
Differences ...
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#12 (text+ko) ====
@@ -39,7 +39,6 @@
/*
* XXX TODO
- * - default context handling.
* - implement debug messages.
* - implement last io funcs.
*/
@@ -79,16 +78,22 @@
&pos->member != (head); \
pos = n, n = LIST_ENT(n->member.next, typeof(*n), member))
-/* fetxh libusb20_transfer from libusb20_device */
+/* fetch libusb20_transfer from libusb20_device */
#define GET_XFER(xfer, endpoint, pdev)\
xfer = libusb20_tr_get_pointer(pdev, \
(2 *endpoint)|(endpoint/0x80)); \
if (xfer == NULL) \
return (LIBUSB_ERROR_OTHER);
+
struct libusb_context *usbi_default_context = NULL;
static pthread_mutex_t default_context_lock = PTHREAD_MUTEX_INITIALIZER;
+/* if ctx is NULL use default context*/
+
+#define GET_CONTEXT(ctx) \
+ if (ctx == NULL) ctx = usbi_default_context;
+
/* Library initialisation / deinitialisation */
struct usb_pollfd {
@@ -107,6 +112,7 @@
void
libusb_set_debug(libusb_context * ctx, int level)
{
+ GET_CONTEXT(ctx);
if (ctx)
ctx->debug = level;
}
@@ -247,6 +253,7 @@
struct libusb20_backend *usb_backend;
int i;
+ GET_CONTEXT(ctx);
usb_backend = libusb20_be_alloc_default();
if (usb_backend == NULL)
return (-1);
@@ -256,7 +263,7 @@
while ((pdev = libusb20_be_device_foreach(usb_backend, pdev)))
i++;
- if (!list) {
+ if (list == NULL) {
libusb20_be_free(usb_backend);
return (LIBUSB_ERROR_INVALID_PARAM);
}
@@ -822,6 +829,7 @@
{
int ret;
+ GET_CONTEXT(ctx);
pthread_mutex_lock(&ctx->pollfd_modify_lock);
ret = ctx->pollfd_modify;
pthread_mutex_unlock(&ctx->pollfd_modify_lock);
@@ -841,6 +849,7 @@
void
libusb_lock_events(libusb_context * ctx)
{
+ GET_CONTEXT(ctx);
pthread_mutex_lock(&ctx->events_lock);
ctx->event_handler_active = 1;
}
@@ -848,6 +857,7 @@
void
libusb_unlock_events(libusb_context * ctx)
{
+ GET_CONTEXT(ctx);
ctx->event_handler_active = 0;
pthread_mutex_unlock(&ctx->events_lock);
@@ -861,9 +871,11 @@
{
int ret;
+ GET_CONTEXT(ctx);
pthread_mutex_lock(&ctx->pollfd_modify_lock);
ret = ctx->pollfd_modify;
pthread_mutex_unlock(&ctx->pollfd_modify_lock);
+
if (ret)
return (0);
return (1);
@@ -874,9 +886,11 @@
{
int ret;
+ GET_CONTEXT(ctx);
pthread_mutex_lock(&ctx->pollfd_modify_lock);
ret = ctx->pollfd_modify;
pthread_mutex_unlock(&ctx->pollfd_modify_lock);
+
if (ret)
return (1);
return (ctx->event_handler_active);
@@ -885,6 +899,7 @@
void
libusb_lock_event_waiters(libusb_context * ctx)
{
+ GET_CONTEXT(ctx);
pthread_mutex_lock(&ctx->event_waiters_lock);
return;
}
@@ -892,6 +907,7 @@
void
libusb_unlock_event_waiters(libusb_context * ctx)
{
+ GET_CONTEXT(ctx);
pthread_mutex_unlock(&ctx->event_waiters_lock);
return;
}
@@ -902,6 +918,7 @@
int ret;
struct timespec ts;
+ GET_CONTEXT(ctx);
if (tv == NULL) {
pthread_cond_wait(&ctx->event_waiters_cond,
&ctx->event_waiters_lock);
@@ -930,6 +947,7 @@
int
libusb_handle_events_timeout(libusb_context * ctx, struct timeval *tv)
{
+ GET_CONTEXT(ctx);
return (0);
}
@@ -946,6 +964,7 @@
int
libusb_handle_events_locked(libusb_context * ctx, struct timeval *tv)
{
+ GET_CONTEXT(ctx);
return (0);
}
@@ -959,6 +978,7 @@
int found;
int ret;
+ GET_CONTEXT(ctx);
found = 0;
pthread_mutex_lock(&ctx->flying_transfers_lock);
if (USB_LIST_EMPTY(&ctx->flying_transfers))
@@ -998,6 +1018,7 @@
libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb,
void *user_data)
{
+ GET_CONTEXT(ctx);
ctx->fd_added_cb = added_cb;
ctx->fd_removed_cb = removed_cb;
ctx->fd_cb_user_data = user_data;
@@ -1010,6 +1031,7 @@
libusb_pollfd **ret;
int i;
+ GET_CONTEXT(ctx);
i = 0;
pthread_mutex_lock(&ctx->pollfds_lock);
LIST_FOREACH_ENTRY(pollfd, &ctx->pollfds, list)
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_desc.c#9 (text+ko) ====
More information about the p4-projects
mailing list