Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Aug 2010 19:14:12 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 183086 for review
Message-ID:  <201008301914.o7UJECdv063758@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@183086?ac=10

Change 183086 by hselasky@hselasky_laptop001 on 2010/08/30 19:14:04

	LibUSB:
		- add missing function definitions for
		libusb_get_driver(), libusb_get_driver_np(),
		libusb_detach_kernel_driver(), libusb_detach_kernel_driver_np().
		- reported by: Alexander Leidinger

Affected files ...

.. //depot/projects/usb/src/lib/libusb/libusb.3#23 edit
.. //depot/projects/usb/src/lib/libusb/libusb.h#17 edit
.. //depot/projects/usb/src/lib/libusb/libusb10.c#27 edit

Differences ...

==== //depot/projects/usb/src/lib/libusb/libusb.3#23 (text+ko) ====

@@ -256,12 +256,37 @@
 .Pp
 .
 .Ft int
+.Fn libusb_get_driver "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
+or
+.Ft int
+.Fn libusb_get_driver_np "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
+Gets the name of the driver attached to the given
+.Fa device
+and
+.Fa interface
+into the buffer given by
+.Fa name
+and
+.Fa namelen .
+Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver is attached
+to the given interface and LIBUSB_ERROR_INVALID_PARAM if the interface does
+not exist.
+This function is non-portable.
+The buffer pointed to by
+.Fa name
+is only zero terminated on success.
+.
+.Pp
+.
+.Ft int
 .Fn libusb_detach_kernel_driver "libusb_device_handle *devh" "int interface"
-Detach a kernel driver from an interface. This is needed to claim an interface
-required by a kernel driver. Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if
-no kernel driver was active, LIBUSB_ERROR_INVALID_PARAM if the interface does not
-exist, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a 
-LIBUSB_ERROR code on failure. 
+or
+.Ft int
+.Fn libusb_detach_kernel_driver_np "libusb_device_handle *devh" "int interface"
+Detach a kernel driver from an interface.
+This is needed to claim an interface required by a kernel driver.
+Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver was active,
+LIBUSB_ERROR_INVALID_PARAM if the interface does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a LIBUSB_ERROR code on failure. This function is non-portable.
 .
 .Pp
 .

==== //depot/projects/usb/src/lib/libusb/libusb.h#17 (text+ko) ====

@@ -319,6 +319,9 @@
 int	libusb_reset_device(libusb_device_handle * devh);
 int	libusb_check_connected(libusb_device_handle * devh);
 int 	libusb_kernel_driver_active(libusb_device_handle * devh, int interface);
+int	libusb_get_driver_np(libusb_device_handle * devh, int interface, char *name, int namelen);
+int	libusb_get_driver(libusb_device_handle * devh, int interface, char *name, int namelen);
+int 	libusb_detach_kernel_driver_np(libusb_device_handle * devh, int interface);
 int 	libusb_detach_kernel_driver(libusb_device_handle * devh, int interface);
 int 	libusb_attach_kernel_driver(libusb_device_handle * devh, int interface);
 int	libusb_set_interface_alt_setting(libusb_device_handle * devh, int interface_number, int alternate_setting);

==== //depot/projects/usb/src/lib/libusb/libusb10.c#27 (text+ko) ====

@@ -487,7 +487,6 @@
 	uint8_t i;
 
 	dev = libusb_get_device(pdev);
-
 	if (dev == NULL)
 		return (LIBUSB_ERROR_INVALID_PARAM);
 
@@ -634,6 +633,8 @@
 		return (LIBUSB_ERROR_INVALID_PARAM);
 
 	dev = libusb_get_device(pdev);
+	if (dev == NULL)
+		return (LIBUSB_ERROR_INVALID_PARAM);
 
 	CTX_LOCK(dev->ctx);
 	err = libusb20_tr_open(xfer, 0, 0, endpoint);
@@ -661,7 +662,7 @@
 
 	dev = libusb_get_device(pdev);
 	if (dev == NULL)
-		return (LIBUSB20_ERROR_INVALID_PARAM);
+		return (LIBUSB_ERROR_INVALID_PARAM);
 
 	libusb10_cancel_all_transfer(dev);
 
@@ -684,7 +685,7 @@
 
 	dev = libusb_get_device(pdev);
 	if (dev == NULL)
-		return (LIBUSB20_ERROR_INVALID_PARAM);
+		return (LIBUSB_ERROR_INVALID_PARAM);
 
 	err = libusb20_dev_check_connected(pdev);
 
@@ -702,6 +703,45 @@
 }
 
 int
+libusb_get_driver_np(struct libusb20_device *pdev, int interface,
+    char *name, int namelen)
+{
+	return (libusb_get_driver(pdev, interface, name, namelen));
+}
+
+int
+libusb_get_driver(struct libusb20_device *pdev, int interface,
+    char *name, int namelen)
+{
+	char *ptr;
+	int err;
+
+	if (pdev == NULL)
+		return (LIBUSB_ERROR_INVALID_PARAM);
+	if (namelen < 1)
+		return (LIBUSB_ERROR_INVALID_PARAM);
+
+	err = libusb20_dev_get_iface_desc(
+	    pdev, interface, name, namelen);
+
+	if (err != 0)
+		return (LIBUSB_ERROR_OTHER);
+
+	/* we only want the driver name */
+	ptr = strstr(name, ":");
+	if (ptr != NULL)
+		*ptr = 0;
+
+	return (0);
+}
+
+int
+libusb_detach_kernel_driver_np(struct libusb20_device *pdev, int interface)
+{
+	return (libusb_detach_kernel_driver(pdev, interface));
+}
+
+int
 libusb_detach_kernel_driver(struct libusb20_device *pdev, int interface)
 {
 	int err;
@@ -712,7 +752,7 @@
 	err = libusb20_dev_detach_kernel_driver(
 	    pdev, interface);
 
-	return (err ? LIBUSB20_ERROR_OTHER : 0);
+	return (err ? LIBUSB_ERROR_OTHER : 0);
 }
 
 int



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008301914.o7UJECdv063758>