aboutsummaryrefslogtreecommitdiff
path: root/lib/libusb
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2018-09-14 13:41:37 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2018-09-14 13:41:37 +0000
commit5b21ba5c5d5c1a0595d5db53ac5b2ae8d7363405 (patch)
treeae2812f4de03671742e3710c0b78ebf8211bf183 /lib/libusb
parent0204d85a62dd18966eae15cc71e9be117b2433c2 (diff)
Improve LibUSB debugging by simultaneously allowing both function
and transfer prints. Make sure the debug level comes from the correct USB context. Found by: Ludovic Rousseau <ludovic.rousseau+freebsd@gmail.com> PR: 231264 MFC after: 1 week Approved by: re (kib) Sponsored by: Mellanox Technologies
Notes
svn path=/head/; revision=338679
Diffstat (limited to 'lib/libusb')
-rw-r--r--lib/libusb/libusb10.h34
-rw-r--r--lib/libusb/libusb10_io.c21
2 files changed, 36 insertions, 19 deletions
diff --git a/lib/libusb/libusb10.h b/lib/libusb/libusb10.h
index 7c34f895b0aa..c3deb562c6d4 100644
--- a/lib/libusb/libusb10.h
+++ b/lib/libusb/libusb10.h
@@ -41,22 +41,24 @@
#define HOTPLUG_LOCK(ctx) pthread_mutex_lock(&(ctx)->hotplug_lock)
#define HOTPLUG_UNLOCK(ctx) pthread_mutex_unlock(&(ctx)->hotplug_lock)
-#define DPRINTF(ctx, dbg, format, args...) do { \
- if ((ctx)->debug == dbg) { \
- switch (dbg) { \
- case LIBUSB_DEBUG_FUNCTION: \
- printf("LIBUSB_FUNCTION: " \
- format "\n", ## args); \
- break; \
- case LIBUSB_DEBUG_TRANSFER: \
- printf("LIBUSB_TRANSFER: " \
- format "\n", ## args); \
- break; \
- default: \
- break; \
- } \
- } \
-} while(0)
+#define DPRINTF(ctx, dbg, format, ...) do { \
+ switch (dbg) { \
+ case LIBUSB_DEBUG_FUNCTION: \
+ if ((ctx)->debug & LIBUSB_DEBUG_FUNCTION) { \
+ printf("LIBUSB_FUNCTION: " \
+ format "\n", ## __VA_ARGS__); \
+ } \
+ break; \
+ case LIBUSB_DEBUG_TRANSFER: \
+ if ((ctx)->debug & LIBUSB_DEBUG_TRANSFER) { \
+ printf("LIBUSB_TRANSFER: " \
+ format "\n", ## __VA_ARGS__); \
+ } \
+ break; \
+ default: \
+ break; \
+ } \
+} while (0)
/* internal structures */
diff --git a/lib/libusb/libusb10_io.c b/lib/libusb/libusb10_io.c
index 42fbd0e2e30b..13c9e786c00e 100644
--- a/lib/libusb/libusb10_io.c
+++ b/lib/libusb/libusb10_io.c
@@ -489,13 +489,26 @@ libusb_control_transfer(libusb_device_handle *devh,
return (actlen);
}
+static libusb_context *
+libusb10_get_context_by_device_handle(libusb_device_handle *devh)
+{
+ libusb_context *ctx;
+
+ if (devh != NULL)
+ ctx = libusb_get_device(devh)->ctx;
+ else
+ ctx = NULL;
+
+ return (GET_CONTEXT(ctx));
+}
+
static void
libusb10_do_transfer_cb(struct libusb_transfer *transfer)
{
libusb_context *ctx;
int *pdone;
- ctx = GET_CONTEXT(NULL);
+ ctx = libusb10_get_context_by_device_handle(transfer->dev_handle);
DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "sync I/O done");
@@ -585,7 +598,8 @@ libusb_bulk_transfer(libusb_device_handle *devh,
libusb_context *ctx;
int ret;
- ctx = GET_CONTEXT(NULL);
+ ctx = libusb10_get_context_by_device_handle(devh);
+
DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_bulk_transfer enter");
ret = libusb10_do_transfer(devh, endpoint, data, length, transferred,
@@ -603,7 +617,8 @@ libusb_interrupt_transfer(libusb_device_handle *devh,
libusb_context *ctx;
int ret;
- ctx = GET_CONTEXT(NULL);
+ ctx = libusb10_get_context_by_device_handle(devh);
+
DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_interrupt_transfer enter");
ret = libusb10_do_transfer(devh, endpoint, data, length, transferred,