The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=872065688515c0c4549b568f7573eb9e7deeedd7
commit 872065688515c0c4549b568f7573eb9e7deeedd7 Author: ShengYi Hung <aokbl...@freebsd.org> AuthorDate: 2025-08-05 12:59:06 +0000 Commit: ShengYi Hung <aokbl...@freebsd.org> CommitDate: 2025-08-06 14:05:40 +0000 libusb: implement libusb_wrap_sys_device The libusb_wrap_sys_device function can wrap an opened fd from the system into a libusb handler. However, in FreeBSD's libusb implementation, a USB device contains two fds: one for control transfers and another for normal (bulk, interrupt, isochronous) transfers. This design makes it impossible for FreeBSD to implement this function without exposing a different structure in libusb.h to provide two fds. Therefore, we return LIBUSB_ERROR_NOT_SUPPORTED to maintain API compatibility. Approved by: makrj (mentor), lwhsu (mentor) Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D51739 --- lib/libusb/libusb.3 | 8 ++++++++ lib/libusb/libusb.h | 1 + lib/libusb/libusb10.c | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/lib/libusb/libusb.3 b/lib/libusb/libusb.3 index 3093737c05d7..09140c914d68 100644 --- a/lib/libusb/libusb.3 +++ b/lib/libusb/libusb.3 @@ -209,6 +209,14 @@ Decrement the reference counter of the device .Fa dev . .Pp .Ft int +.Fn libusb_wrap_sys_device "libusb_context *ctx" "intptr_t sys_dev" "libusb_device_handle **dev_handle" +This function creates a libusb handler from a previously opened fd +.Fa sys_dev . +This function is provided for compatibility and is currently unimplemented. +It always returns +.Dv LIBUSB_ERROR_NOT_SUPPORTED . +.Pp +.Ft int .Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh" Open a device and obtain a device_handle. Returns 0 on success, diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h index d8a3e4b62995..277b551c46a1 100644 --- a/lib/libusb/libusb.h +++ b/lib/libusb/libusb.h @@ -506,6 +506,7 @@ int libusb_get_max_packet_size(libusb_device * dev, uint8_t endpoint); int libusb_get_max_iso_packet_size(libusb_device * dev, uint8_t endpoint); libusb_device *libusb_ref_device(libusb_device * dev); void libusb_unref_device(libusb_device * dev); +int libusb_wrap_sys_device(libusb_context *ctx, intptr_t sys_dev, libusb_device_handle **dev_handle); int libusb_open(libusb_device * dev, libusb_device_handle ** devh); libusb_device_handle *libusb_open_device_with_vid_pid(libusb_context * ctx, uint16_t vendor_id, uint16_t product_id); void libusb_close(libusb_device_handle * devh); diff --git a/lib/libusb/libusb10.c b/lib/libusb/libusb10.c index 5c116b39ea17..e226def0b7b6 100644 --- a/lib/libusb/libusb10.c +++ b/lib/libusb/libusb10.c @@ -1918,3 +1918,10 @@ libusb_dev_mem_free(libusb_device_handle *devh, unsigned char *buffer, { return (LIBUSB_ERROR_NOT_SUPPORTED); } + +int +libusb_wrap_sys_device(libusb_context *ctx, intptr_t sys_dev, + libusb_device_handle **dev_handle) +{ + return (LIBUSB_ERROR_NOT_SUPPORTED); +}