From nobody@FreeBSD.org  Fri Aug 19 03:29:00 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 2731F1065670
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 19 Aug 2011 03:29:00 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 15F298FC16
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 19 Aug 2011 03:29:00 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p7J3Sxew023185
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 19 Aug 2011 03:28:59 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id p7J3SxQ3023184;
	Fri, 19 Aug 2011 03:28:59 GMT
	(envelope-from nobody)
Message-Id: <201108190328.p7J3SxQ3023184@red.freebsd.org>
Date: Fri, 19 Aug 2011 03:28:59 GMT
From: Ben Kaduk <kaduk@mit.edu>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [patch] libusb.3 whitespace, markup, grammar fixes
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         159898
>Category:       docs
>Synopsis:       [patch] libusb.3 whitespace, markup, grammar fixes
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    hselasky
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          doc-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Aug 19 03:30:08 UTC 2011
>Closed-Date:    Sun Jul 01 10:13:49 UTC 2012
>Last-Modified:  Sun Jul 01 10:13:49 UTC 2012
>Originator:     Ben Kaduk
>Release:        9-current
>Organization:
MIT SIPB
>Environment:
n/a
>Description:
libusb.3 started out with a lot of long lines, sentences starting in the middle of lines, trailing whitespace, and ignored lines consisting of just '.'.  Mechanical fixes for these issues are in one patch.
There are also many grammar and consistency issues in the man page, which are fixed in a second patch.  I'll attach the grammar patch in the webform and send the whitespace diff as an update to the ticket.  (The grammar patch applies on top of the whitespace patch, though.)

There are several functions whose return values are erroneously described in the man page at this point, but I can't commit enough time for a full audit at this point in time.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

--- libusb.3.whitespace	2011-08-18 13:42:48.000000000 -0400
+++ libusb.3	2011-08-18 23:22:35.000000000 -0400
@@ -33,7 +33,8 @@
 .Nm libusb
 .Nd "USB access library"
 .Sh LIBRARY
-USB access library (libusb -lusb)
+USB access library
+.Pq libusb, -lusb
 .Sh SYNOPSIS
 .In libusb.h
 .Sh DESCRIPTION
@@ -46,8 +47,8 @@
 .Ft int
 .Fn libusb_init libusb_context **ctx
 This function initialises libusb.
-Must be called at the beginning
-of the program.
+It must be called at the beginning
+of the program, before other libusb routines are used.
 This function returns 0 on success or LIBUSB_ERROR on
 failure.
 .Pp
@@ -55,35 +56,39 @@
 .Fn libusb_exit "libusb_context *ctx"
 Deinitialise libusb.
 Must be called at the end of the application.
+Other libusb routines may not be called after this function.
 .Pp
 .Ft const char *
 .Fn libusb_strerror "int code"
-Get ASCII representation of the error given by the
+Get the ASCII representation of the error given by the
 .Fa code
 argument.
 .Pp
 .Ft void
 .Fn libusb_set_debug "libusb_context *ctx" "int level"
-Set debug to the
-.Fa level
-level.
+Set the debug level to
+.Fa level .
 .Pp
 .Ft ssize_t
 .Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list"
-Fill into
+Populate
 .Fa list
-the list of usb device available.
-All the device created by this
-function must be unref and free when you are done with them.
+with the list of usb devices available, adding a reference to each
+device in the list.
+All the list entries created by this
+function must have their reference counter
+decremented when you are done with them,
+and the list itself must be freed.
 This
-function returns the number of devices in list or a LIBUSB_ERROR code.
+function returns the number of devices in the list or a LIBUSB_ERROR code.
 .Pp
 .Ft void
 .Fn libusb_free_device_list "libusb_device **list" "int unref_devices"
 Free the list of devices discovered by libusb_get_device_list.
 If
 .Fa unref_device
-is set to 1 all devices are unref one time.
+is set to 1 all devices in the list have their reference
+counter decremented once.
 .Pp
 .Ft uint8_t
 .Fn libusb_get_bus_number "libusb_device *dev"
@@ -120,13 +125,13 @@
 .Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh"
 Open a device and obtain a device_handle.
 Returns 0 on success,
-LIBUSB_ERROR_NO_MEM on memory allocation problem, LIBUSB_ERROR_ACCESS
-on permission problem, LIBUSB_ERROR_NO_DEVICE if the device has been
-disconnected and a LIBUSB_ERROR code on error.
+LIBUSB_ERROR_NO_MEM on memory allocation problems, LIBUSB_ERROR_ACCESS
+on permissions problems, LIBUSB_ERROR_NO_DEVICE if the device has been
+disconnected and a LIBUSB_ERROR code on other errors.
 .Pp
 .Ft libusb_device_handle *
 .Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid"
-Convenience function to open a device with is
+A convenience function to open a device with vendor and producd IDs
 .Fa vid
 and
 .Fa pid.
@@ -150,7 +155,7 @@
 .Pp
 .Ft int
 .Fn libusb_set_configuration "libusb_device_handle *devh" "int config"
-Set the active configuration
+Set the active configuration to
 .Fa config
 for the device contained by
 .Fa devh.
@@ -164,16 +169,16 @@
 Claim an interface in a given libusb_handle
 .Fa devh.
 This is a non-blocking function.
-It returns 0 success, LIBUSB_ERROR_NOT_FOUND
+It returns 0 on success, LIBUSB_ERROR_NOT_FOUND
 if the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or
 driver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has
 been disconnected and a LIBUSB_ERROR code on failure.
 .Pp
 .Ft int
 .Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number"
-This function release an interface.
-All the claimed interface must be released
-before closing a device.
+This function releases an interface.
+All the claimed interfaces on a device must be released
+before closing the device.
 Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the
 interface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been
 disconnected and LIBUSB_ERROR on failure.
@@ -184,7 +189,7 @@
 Returns 0 on success,
 LIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested
 setting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
-disconnected and LIBUSB_ERROR code on failure.
+disconnected and a LIBUSB_ERROR code on failure.
 .Pp
 .Ft int
 .Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint"
@@ -202,31 +207,30 @@
 .Pp
 .Ft int
 .Fn libusb_check_connected "libusb_device_handle *devh"
-Test if USB device is still connected.
+Test if the USB device is still connected.
 Returns 0 on success,
-LIBUSB_ERROR_NO_DEVICE if has been disconnected and a LIBUSB_ERROR
+LIBUSB_ERROR_NO_DEVICE if it has been disconnected and a LIBUSB_ERROR
 code on failure.
 .Pp
 .Ft int
 .Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface"
 Determine if a driver is active on a interface.
 Returns 0 if no kernel driver
-is active, returns 1 if a kernel driver is active,
-returns LIBUSB_ERROR_NO_DEVICE
-if the device has been disconnected and returns a LIBUSB_ERROR code on failure.
+is active, 1 if a kernel driver is active, LIBUSB_ERROR_NO_DEVICE
+if the device has been disconnected and a LIBUSB_ERROR code on failure.
 .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
+Copy the name of the driver attached to the given
 .Fa device
 and
 .Fa interface
-into the buffer given by
+into the buffer
 .Fa name
-and
+of length
 .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
@@ -242,7 +246,7 @@
 .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.
+This is needed to claim an interface already claimed 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
@@ -251,11 +255,11 @@
 .Pp
 .Ft int
 .Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface"
-Re-attach an interface kernel driver previously detached.
+Re-attach an interface kernel driver that was previously detached.
 Returns 0 on success,
 LIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
 LIBUSB_ERROR_NO_DEVICE
-if the device has been disconnect, LIBUSB_ERROR_BUSY if the driver cannot be
+if the device has been disconnected, LIBUSB_ERROR_BUSY if the driver cannot be
 attached because the interface is claimed by a program or driver and a
 LIBUSB_ERROR code on failure.
 .Pp
@@ -273,24 +277,25 @@
 .Fn libsub_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config"
 Get the USB configuration descriptor for the active configuration.
 Returns 0 on
-success, returns LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state
-and returns another LIBUSB_ERROR code on error.
+success, LIBUSB_ERROR_NOT_FOUND if the device is in
+an unconfigured state
+and a LIBUSB_ERROR code on error.
 .Pp
 .Ft int
 .Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config"
-Get USB configuration descriptor based on its index
+Get a USB configuration descriptor based on its index
 .Fa idx.
 Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist
-and returns another LIBUSB_ERROR code on error.
+and a LIBUSB_ERROR code on error.
 .Pp
 .Ft int
 .Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config"
 Get a USB configuration descriptor with a specific bConfigurationValue.
 This is
-a non-blocking function which does not send request through the device.
+a non-blocking function which does not send a request through the device.
 Returns 0
 on success, LIBUSB_ERROR_NOT_FOUND if the configuration
-does not exist and another
+does not exist and a
 LIBUSB_ERROR code on failure.
 .Pp
 .Ft void
@@ -299,17 +304,17 @@
 .Pp
 .Ft int
 .Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length"
-Retrieve a string descriptor in C style ascii.
-Returns a positive number of bytes in the resulting ASCII string
+Retrieve a string descriptor in C style ASCII.
+Returns the positive number of bytes in the resulting ASCII string
 on success and a LIBUSB_ERROR code on failure.
 .Pp
 .Sh USB ASYNCHRONOUS I/O
 .Pp
 .Ft struct libusb_transfer *
 .Fn libusb_alloc_transfer "int iso_packets"
-Allocate a transfer with
-.Fa iso_packets
-numbers of isochronous packet descriptors.
+Allocate a transfer with the number of isochronous packet descriptors
+specified by
+.Fa iso_packets .
 Returns NULL on error.
 .Pp
 .Ft void
@@ -320,13 +325,13 @@
 .Fn libusb_submit_transfer "struct libusb_transfer *tr"
 This function will submit a transfer and returns immediately.
 Returns 0 on success, LIBUSB_ERROR_NO_DEVICE if
-the device has been disconnected and
+the device has been disconnected and a
 LIBUSB_ERROR code on other failure.
 .Pp
 .Ft int
 .Fn libusb_cancel_transfer "struct libusb_transfer *tr"
-This function asynchronously cancel a transfer.
-Returns 0 on success and LIBUSB_ERROR code on failure.
+This function asynchronously cancels a transfer.
+Returns 0 on success and a LIBUSB_ERROR code on failure.
 .Pp
 .Sh USB SYNCHRONOUS I/O
 .Pp
@@ -334,14 +339,14 @@
 .Fn libusb_control_transfer "libusb_device_handle *devh" "uint8_t bmRequestType" "uint8_t bRequest" "uint16_t wValue" "uint16_t wIndex" "unsigned char *data" "uint16_t wLength" "unsigned int timeout"
 Perform a USB control transfer.
 Returns the actual number of bytes
-transferred on success in the range from and including zero until and
+transferred on success, in the range from and including zero up to and
 including
 .Fa wLength .
-On error a libusb error code is returned, for example
-LIBUSB_ERROR_TIMEOUT if the transfer timeout, LIBUSB_ERROR_PIPE if the
+On error a LIBUSB_ERROR code is returned, for example
+LIBUSB_ERROR_TIMEOUT if the transfer timed out, LIBUSB_ERROR_PIPE if the
 control request was not supported, LIBUSB_ERROR_NO_DEVICE if the
-device has been disconnected or another LIBUSB_ERROR code on other failures.
-The libusb error codes are always negative.
+device has been disconnected and another LIBUSB_ERROR code on other failures.
+The LIBUSB_ERROR codes are all negative.
 .Pp
 .Ft int
 .Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
@@ -349,10 +354,10 @@
 A timeout value of zero means no timeout.
 The timeout value is given in milliseconds.
 Returns 0 on success, LIBUSB_ERROR_TIMEOUT
-if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not
+if the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
 supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
 LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
-LIBUSB_ERROR code on other failure.
+a LIBUSB_ERROR code on other failure.
 .Pp
 .Ft int
 .Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
@@ -360,10 +365,10 @@
 A timeout value of zero means no timeout.
 The timeout value is given in milliseconds.
 Returns 0 on success, LIBUSB_ERROR_TIMEOUT
-if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not
+if the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
 supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
 LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
-LIBUSB_ERROR code on other failure.
+a LIBUSB_ERROR code on other failure.
 .Pp
 .Sh USB EVENTS
 .Pp
@@ -381,7 +386,8 @@
 .Fn libusb_unlock_events "libusb_context *ctx"
 Release the event handling lock.
 This will wake up any thread blocked
-on libusb_wait_for_event().
+on
+.B libusb_wait_for_event() .
 .Pp
 .Ft int
 .Fn libusb_event_handling_ok "libusb_context *ctx"
@@ -394,13 +400,13 @@
 .Ft int
 .Fn libusb_event_handler_active "libusb_context *ctx"
 Determine if an active thread is handling events.
-Returns 1 if yes and 0 if there
+Returns 1 if there is a thread handling events and 0 if there
 are no threads currently handling events.
 .Pp
 .Ft void
 .Fn libusb_lock_event_waiters "libusb_context *ctx"
 Acquire the event_waiters lock.
-This lock is designed to be obtained under the
+This lock is designed to be obtained in the
 situation where you want to be aware when events are completed, but some other
 thread is event handling so calling libusb_handle_events() is not allowed.
 .Pp
@@ -417,7 +423,7 @@
 block until the timeout expires or a transfer completes or a thread releases
 the event handling lock through libusb_unlock_events().
 Returns 0 after a
-transfer completes or another thread stops event handling, returns 1 if the
+transfer completes or another thread stops event handling, and 1 if the
 timeout expired.
 .Pp
 .Ft int
@@ -431,19 +437,19 @@
 .Fn libusb_handle_events "libusb_context *ctx"
 Handle any pending events in blocking mode with a sensible timeout.
 Returns 0
-on success, returns a LIBUSB_ERROR code on failure.
+on success and a LIBUSB_ERROR code on failure.
 .Pp
 .Ft int
 .Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv"
 Handle any pending events by polling file desciptors, without checking if
-another threads are already doing so.
+another thread is already doing so.
 Must be called with the event lock held.
 .Pp
 .Ft int
 .Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv"
 Determine the next internal timeout that libusb needs to handle.
 Returns 0
-if there are no pending timeouts, 1 if a timeout was returned, or LIBUSB_ERROR
+if there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR
 code on failure.
 .Pp
 .Ft void


>Release-Note:
>Audit-Trail:

From: Benjamin Kaduk <kaduk@MIT.EDU>
To: freebsd-gnats-submit@freebsd.org
Cc: freebsd-doc@freebsd.org
Subject: Re: docs/159898: [patch] libusb.3 whitespace, markup, grammar
 fixes
Date: Thu, 18 Aug 2011 23:31:56 -0400 (EDT)

   This message is in MIME format.  The first part should be readable text,
   while the remaining parts are likely unreadable without MIME-aware tools.
 
 ---559023410-862053639-1313724716=:7526
 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
 
 On Fri, 19 Aug 2011, Ben Kaduk wrote:
 
 >
 >> Description:
 > libusb.3 started out with a lot of long lines, sentences starting in the middle of lines, trailing whitespace, and ignored lines consisting of just '.'.  Mechanical fixes for these issues are in one patch.
 > There are also many grammar and consistency issues in the man page, which are fixed in a second patch.  I'll attach the grammar patch in the webform and send the whitespace diff as an update to the ticket.  (The grammar patch applies on top of the whitespace patch, though.)
 
 The whitespace patch.
 (Note that there was at least one line '. ', if the '.' lines are to be 
 kept for some reason.)
 
 -Ben Kaduk
 ---559023410-862053639-1313724716=:7526
 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=libusb.3.whitespace.diff.txt
 Content-Transfer-Encoding: BASE64
 Content-ID: <alpine.GSO.1.10.1108182331560.7526@multics.mit.edu>
 Content-Description: 
 Content-Disposition: attachment; filename=libusb.3.whitespace.diff.txt
 
 LS0tIGxpYnVzYi4zLm9yaWcJMjAxMS0wOC0xOCAxMToyODo1MC4wMDAwMDAw
 MDAgLTA0MDANCisrKyBsaWJ1c2IuMy53aGl0ZXNwYWNlCTIwMTEtMDgtMTgg
 MTM6NDI6NDguMDAwMDAwMDAwIC0wNDAwDQpAQCAtMzEsMTY1ICszMSwxMjMg
 QEANCiAuT3MNCiAuU2ggTkFNRQ0KIC5ObSBsaWJ1c2INCi0uDQogLk5kICJV
 U0IgYWNjZXNzIGxpYnJhcnkiDQotLg0KLS4NCiAuU2ggTElCUkFSWQ0KLS4N
 Ci0uDQogVVNCIGFjY2VzcyBsaWJyYXJ5IChsaWJ1c2IgLWx1c2IpDQotLg0K
 LS4NCiAuU2ggU1lOT1BTSVMNCi0uDQotLg0KIC5JbiBsaWJ1c2IuaA0KLS4N
 Ci0uDQogLlNoIERFU0NSSVBUSU9ODQogVGhlDQogLk5tDQogbGlicmFyeSBj
 b250YWlucyBpbnRlcmZhY2VzIGZvciBkaXJlY3RseSBtYW5hZ2luZyBhIHVz
 YiBkZXZpY2UuDQogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc3VwcG9y
 dHMgdjEuMCBvZiB0aGUgbGlidXNiIEFQSS4NCi0uDQotLg0KIC5TaCBMSUJS
 QVJZIElOSVRJQUxJU0FUSU9OIC8gREVJTklUSUFMSVNBVElPTg0KLS4NCiAu
 UHANCi0uDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfaW5pdCBsaWJ1c2JfY29u
 dGV4dCAqKmN0eA0KLVRoaXMgZnVuY3Rpb24gaW5pdGlhbGlzZXMgbGlidXNi
 LiBNdXN0IGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nDQotb2YgdGhlIHBy
 b2dyYW0uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Ig
 TElCVVNCX0VSUk9SIG9uIA0KK1RoaXMgZnVuY3Rpb24gaW5pdGlhbGlzZXMg
 bGlidXNiLg0KK011c3QgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcNCitv
 ZiB0aGUgcHJvZ3JhbS4NCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBz
 dWNjZXNzIG9yIExJQlVTQl9FUlJPUiBvbg0KIGZhaWx1cmUuDQotLiANCiAu
 UHANCi0uDQogLkZ0IHZvaWQNCiAuRm4gbGlidXNiX2V4aXQgImxpYnVzYl9j
 b250ZXh0ICpjdHgiDQotRGVpbml0aWFsaXNlIGxpYnVzYi4gTXVzdCBiZSBj
 YWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgYXBwbGljYXRpb24uDQotLg0KK0Rl
 aW5pdGlhbGlzZSBsaWJ1c2IuDQorTXVzdCBiZSBjYWxsZWQgYXQgdGhlIGVu
 ZCBvZiB0aGUgYXBwbGljYXRpb24uDQogLlBwDQotLg0KIC5GdCBjb25zdCBj
 aGFyICoNCiAuRm4gbGlidXNiX3N0cmVycm9yICJpbnQgY29kZSINCiBHZXQg
 QVNDSUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGdpdmVuIGJ5IHRo
 ZQ0KIC5GYSBjb2RlDQogYXJndW1lbnQuDQotLg0KLS4NCiAuUHANCi0uDQog
 LkZ0IHZvaWQNCiAuRm4gbGlidXNiX3NldF9kZWJ1ZyAibGlidXNiX2NvbnRl
 eHQgKmN0eCIgImludCBsZXZlbCINCiBTZXQgZGVidWcgdG8gdGhlDQogLkZh
 IGxldmVsDQogbGV2ZWwuDQotLg0KIC5QcA0KLS4NCiAuRnQgc3NpemVfdA0K
 IC5GbiBsaWJ1c2JfZ2V0X2RldmljZV9saXN0ICJsaWJ1c2JfY29udGV4dCAq
 Y3R4IiAibGlidXNiX2RldmljZSAqKipsaXN0Ig0KIEZpbGwgaW50bw0KLS5G
 YSBsaXN0IA0KLXRoZSBsaXN0IG9mIHVzYiBkZXZpY2UgYXZhaWxhYmxlLiBB
 bGwgdGhlIGRldmljZSBjcmVhdGVkIGJ5IHRoaXMNCi1mdW5jdGlvbiBtdXN0
 IGJlIHVucmVmIGFuZCBmcmVlIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhl
 bS4gVGhpcw0KKy5GYSBsaXN0DQordGhlIGxpc3Qgb2YgdXNiIGRldmljZSBh
 dmFpbGFibGUuDQorQWxsIHRoZSBkZXZpY2UgY3JlYXRlZCBieSB0aGlzDQor
 ZnVuY3Rpb24gbXVzdCBiZSB1bnJlZiBhbmQgZnJlZSB3aGVuIHlvdSBhcmUg
 ZG9uZSB3aXRoIHRoZW0uDQorVGhpcw0KIGZ1bmN0aW9uIHJldHVybnMgdGhl
 IG51bWJlciBvZiBkZXZpY2VzIGluIGxpc3Qgb3IgYSBMSUJVU0JfRVJST1Ig
 Y29kZS4NCi0uDQogLlBwDQotLg0KIC5GdCB2b2lkDQogLkZuIGxpYnVzYl9m
 cmVlX2RldmljZV9saXN0ICJsaWJ1c2JfZGV2aWNlICoqbGlzdCIgImludCB1
 bnJlZl9kZXZpY2VzIg0KLUZyZWUgdGhlIGxpc3Qgb2YgZGV2aWNlcyBkaXNj
 b3ZlcmVkIGJ5IGxpYnVzYl9nZXRfZGV2aWNlX2xpc3QuIElmIA0KK0ZyZWUg
 dGhlIGxpc3Qgb2YgZGV2aWNlcyBkaXNjb3ZlcmVkIGJ5IGxpYnVzYl9nZXRf
 ZGV2aWNlX2xpc3QuDQorSWYNCiAuRmEgdW5yZWZfZGV2aWNlDQogaXMgc2V0
 IHRvIDEgYWxsIGRldmljZXMgYXJlIHVucmVmIG9uZSB0aW1lLg0KLS4NCiAu
 UHANCi0uDQogLkZ0IHVpbnQ4X3QNCiAuRm4gbGlidXNiX2dldF9idXNfbnVt
 YmVyICJsaWJ1c2JfZGV2aWNlICpkZXYiDQogUmV0dXJucyB0aGUgbnVtYmVy
 IG9mIHRoZSBidXMgY29udGFpbmVkIGJ5IHRoZSBkZXZpY2UNCiAuRmEgZGV2
 Lg0KLS4NCiAuUHANCi0uDQogLkZ0IHVpbnQ4X3QNCiAuRm4gbGlidXNiX2dl
 dF9kZXZpY2VfYWRkcmVzcyAibGlidXNiX2RldmljZSAqZGV2Ig0KIFJldHVy
 bnMgdGhlIGRldmljZV9hZGRyZXNzIGNvbnRhaW5lZCBieSB0aGUgZGV2aWNl
 DQogLkZhIGRldi4NCi0uDQogLlBwDQotLg0KIC5GdCBlbnVtIGxpYnVzYl9z
 cGVlZA0KIC5GbiBsaWJ1c2JfZ2V0X2RldmljZV9zcGVlZCAibGlidXNiX2Rl
 dmljZSAqZGV2Ig0KIFJldHVybnMgdGhlIHdpcmUgc3BlZWQgYXQgd2hpY2gg
 dGhlIGRldmljZSBpcyBjb25uZWN0ZWQuDQogU2VlIHRoZSBMSUJVU0JfU1BF
 RURfWFhYIGVudW1zIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KIExJQlVTQl9T
 UEVFRF9VTktOT1dOIGlzIHJldHVybmVkIGluIGNhc2Ugb2YgdW5rbm93biB3
 aXJlIHNwZWVkLg0KLS4NCiAuUHANCi0uDQogLkZ0IGludA0KIC5GbiBsaWJ1
 c2JfZ2V0X21heF9wYWNrZXRfc2l6ZSAibGlidXNiX2RldmljZSAqZGV2IiAi
 dW5zaWduZWQgY2hhciBlbmRwb2ludCINCi1SZXR1cm5zIHRoZSB3TWF4UGFj
 a2V0U2l6ZSB2YWx1ZSBvbiBzdWNjZXNzLCBMSUJVU0JfRVJST1JfTk9UX0ZP
 VU5EIGlmIHRoZSANCitSZXR1cm5zIHRoZSB3TWF4UGFja2V0U2l6ZSB2YWx1
 ZSBvbiBzdWNjZXNzLCBMSUJVU0JfRVJST1JfTk9UX0ZPVU5EIGlmIHRoZQ0K
 IGVuZHBvaW50IGRvZXMgbm90IGV4aXN0IGFuZCBMSUJVU0JfRVJST1JfT1RI
 RVJTIG9uIG90aGVyIGZhaWx1cmUuDQotLg0KIC5QcA0KLS4NCiAuRnQgbGli
 dXNiX2RldmljZSAqDQogLkZuIGxpYnVzYl9yZWZfZGV2aWNlICJsaWJ1c2Jf
 ZGV2aWNlICpkZXYiDQogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRl
 ciBvZiB0aGUgZGV2aWNlDQogLkZhIGRldi4NCi0uDQogLlBwDQotLg0KIC5G
 dCB2b2lkDQogLkZuIGxpYnVzYl91bnJlZl9kZXZpY2UgImxpYnVzYl9kZXZp
 Y2UgKmRldiINCiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudGVyIG9m
 IHRoZSBkZXZpY2UNCiAuRmEgZGV2Lg0KLS4NCiAuUHANCi0uDQogLkZ0IGlu
 dA0KIC5GbiBsaWJ1c2Jfb3BlbiAibGlidXNiX2RldmljZSAqZGV2IiAibGli
 dXNiX2RldmljZV9oYW5kbGUgKipkZXZoIg0KLU9wZW4gYSBkZXZpY2UgYW5k
 IG9idGFpbiBhIGRldmljZV9oYW5kbGUuIFJldHVybnMgMCBvbiBzdWNjZXNz
 LCANCi1MSUJVU0JfRVJST1JfTk9fTUVNIG9uIG1lbW9yeSBhbGxvY2F0aW9u
 IHByb2JsZW0sIExJQlVTQl9FUlJPUl9BQ0NFU1MgDQotb24gcGVybWlzc2lv
 biBwcm9ibGVtLCBMSUJVU0JfRVJST1JfTk9fREVWSUNFIGlmIHRoZSBkZXZp
 Y2UgaGFzIGJlZW4gDQorT3BlbiBhIGRldmljZSBhbmQgb2J0YWluIGEgZGV2
 aWNlX2hhbmRsZS4NCitSZXR1cm5zIDAgb24gc3VjY2VzcywNCitMSUJVU0Jf
 RVJST1JfTk9fTUVNIG9uIG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW0sIExJ
 QlVTQl9FUlJPUl9BQ0NFU1MNCitvbiBwZXJtaXNzaW9uIHByb2JsZW0sIExJ
 QlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgdGhlIGRldmljZSBoYXMgYmVlbg0K
 IGRpc2Nvbm5lY3RlZCBhbmQgYSBMSUJVU0JfRVJST1IgY29kZSBvbiBlcnJv
 ci4NCi0uDQogLlBwDQotLg0KIC5GdCBsaWJ1c2JfZGV2aWNlX2hhbmRsZSAq
 DQogLkZuIGxpYnVzYl9vcGVuX2RldmljZV93aXRoX3ZpZF9waWQgImxpYnVz
 Yl9jb250ZXh0ICpjdHgiICJ1aW50MTZfdCB2aWQiICJ1aW50MTZfdCBwaWQi
 DQotQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gb3BlbiBhIGRldmljZSB3aXRo
 IGlzIA0KLS5GYSB2aWQgDQotYW5kIA0KK0NvbnZlbmllbmNlIGZ1bmN0aW9u
 IHRvIG9wZW4gYSBkZXZpY2Ugd2l0aCBpcw0KKy5GYSB2aWQNCithbmQNCiAu
 RmEgcGlkLg0KIFJldHVybnMgTlVMTCBvbiBlcnJvci4NCi0uDQogLlBwDQot
 Lg0KIC5GdCB2b2lkDQogLkZuIGxpYnVzYl9jbG9zZSAibGlidXNiX2Rldmlj
 ZV9oYW5kbGUgKmRldmgiDQogQ2xvc2UgYSBkZXZpY2UgaGFuZGxlLg0KLS4N
 CiAuUHANCi0uDQogLkZ0IGxpYnVzYl9kZXZpY2UgKg0KIC5GbiBsaWJ1c2Jf
 Z2V0X2RldmljZSAibGlidXNiX2RldmljZV9oYW5kbGUgKmRldmgiDQogR2V0
 IHRoZSBkZXZpY2UgY29udGFpbmVkIGJ5IGRldmguDQogUmV0dXJucyBOVUxM
 IG9uIGVycm9yLg0KLS4NCiAuUHANCi0uDQogLkZ0IGludA0KIC5GbiBsaWJ1
 c2JfZ2V0X2NvbmZpZ3VyYXRpb24gImxpYnVzYl9kZXZpY2VfaGFuZGxlICpk
 ZXZoIiAiaW50ICpjb25maWciDQotUmV0dXJucyB0aGUgYkNvbmZpZ3VyYXRp
 b24gdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gUmV0dXJu
 cyAwDQotb24gc3VjY2VzcywgTElCVVNCX0VSUk9SX05PX0RFVklDRSBpZiB0
 aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCANCitSZXR1cm5zIHRo
 ZSBiQ29uZmlndXJhdGlvbiB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb25maWd1
 cmF0aW9uLg0KK1JldHVybnMgMA0KK29uIHN1Y2Nlc3MsIExJQlVTQl9FUlJP
 Ul9OT19ERVZJQ0UgaWYgdGhlIGRldmljZSBoYXMgYmVlbiBkaXNjb25uZWN0
 ZWQNCiBhbmQgYSBMSUJVU0JfRVJST1IgY29kZSBvbiBlcnJvci4NCi0uDQog
 LlBwDQotLg0KIC5GdCBpbnQNCiAuRm4gbGlidXNiX3NldF9jb25maWd1cmF0
 aW9uICJsaWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2aCIgImludCBjb25maWci
 DQogU2V0IHRoZSBhY3RpdmUgY29uZmlndXJhdGlvbg0KQEAgLTE5Nyw3MyAr
 MTU1LDY2IEBADQogZm9yIHRoZSBkZXZpY2UgY29udGFpbmVkIGJ5DQogLkZh
 IGRldmguDQogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2Vzcywg
 TElCVVNCX0VSUk9SX05PVF9GT1VORCBpZiB0aGUgcmVxdWVzdGVkDQotY29u
 ZmlndXJhdGlvbiBkb2VzIG5vdCBleGlzdCwgTElCVVNCX0VSUk9SX0JVU1kg
 aWYgdGhlIGludGVyZmFjZXMgYXJlIGN1cnJlbnRseSANCi1jbGFpbWVkLCBM
 SUJVU0JfRVJST1JfTk9fREVWSUNFIGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4g
 ZGlzY29ubmVjdGVkIGFuZCBhIA0KK2NvbmZpZ3VyYXRpb24gZG9lcyBub3Qg
 ZXhpc3QsIExJQlVTQl9FUlJPUl9CVVNZIGlmIHRoZSBpbnRlcmZhY2VzIGFy
 ZSBjdXJyZW50bHkNCitjbGFpbWVkLCBMSUJVU0JfRVJST1JfTk9fREVWSUNF
 IGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGFuZCBhDQog
 TElCVVNCX0VSUk9SIGNvZGUgb24gZmFpbHVyZS4NCi0uDQogLlBwDQotLg0K
 IC5GdCBpbnQNCiAuRm4gbGlidXNiX2NsYWltX2ludGVyZmFjZSAibGlidXNi
 X2RldmljZV9oYW5kbGUgKmRldmgiICJpbnQgaW50ZXJmYWNlX251bWJlciIN
 CiBDbGFpbSBhbiBpbnRlcmZhY2UgaW4gYSBnaXZlbiBsaWJ1c2JfaGFuZGxl
 DQogLkZhIGRldmguDQotVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlv
 bi4gSXQgcmV0dXJucyAwIHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9OT1RfRk9V
 TkQgDQotaWYgdGhlIHJlcXVlc3RlZCBpbnRlcmZhY2UgZG9lcyBub3QgZXhp
 c3QsIExJQlVTQl9FUlJPUl9CVVNZIGlmIGEgcHJvZ3JhbSBvciANCi1kcml2
 ZXIgaGFzIGNsYWltZWQgdGhlIGludGVyZmFjZSwgTElCVVNCX0VSUk9SX05P
 X0RFVklDRSBpZiB0aGUgZGV2aWNlIGhhcyANCitUaGlzIGlzIGEgbm9uLWJs
 b2NraW5nIGZ1bmN0aW9uLg0KK0l0IHJldHVybnMgMCBzdWNjZXNzLCBMSUJV
 U0JfRVJST1JfTk9UX0ZPVU5EDQoraWYgdGhlIHJlcXVlc3RlZCBpbnRlcmZh
 Y2UgZG9lcyBub3QgZXhpc3QsIExJQlVTQl9FUlJPUl9CVVNZIGlmIGEgcHJv
 Z3JhbSBvcg0KK2RyaXZlciBoYXMgY2xhaW1lZCB0aGUgaW50ZXJmYWNlLCBM
 SUJVU0JfRVJST1JfTk9fREVWSUNFIGlmIHRoZSBkZXZpY2UgaGFzDQogYmVl
 biBkaXNjb25uZWN0ZWQgYW5kIGEgTElCVVNCX0VSUk9SIGNvZGUgb24gZmFp
 bHVyZS4NCi0uDQogLlBwDQotLg0KIC5GdCBpbnQNCiAuRm4gbGlidXNiX3Jl
 bGVhc2VfaW50ZXJmYWNlICJsaWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2aCIg
 ImludCBpbnRlcmZhY2VfbnVtYmVyIg0KLVRoaXMgZnVuY3Rpb24gcmVsZWFz
 ZSBhbiBpbnRlcmZhY2UuIEFsbCB0aGUgY2xhaW1lZCBpbnRlcmZhY2UgbXVz
 dCBiZSByZWxlYXNlZA0KLWJlZm9yZSBjbG9zaW5nIGEgZGV2aWNlLiBSZXR1
 cm5zIDAgb24gc3VjY2VzcywgTElCVVNCX0VSUk9SX05PVF9GT1VORCBpZiB0
 aGUgDQotaW50ZXJmYWNlIHdhcyBub3QgY2xhaW1lZCwgTElCVVNCX0VSUk9S
 X05PX0RFVklDRSBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuIA0KK1RoaXMgZnVu
 Y3Rpb24gcmVsZWFzZSBhbiBpbnRlcmZhY2UuDQorQWxsIHRoZSBjbGFpbWVk
 IGludGVyZmFjZSBtdXN0IGJlIHJlbGVhc2VkDQorYmVmb3JlIGNsb3Npbmcg
 YSBkZXZpY2UuDQorUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIExJQlVTQl9FUlJP
 Ul9OT1RfRk9VTkQgaWYgdGhlDQoraW50ZXJmYWNlIHdhcyBub3QgY2xhaW1l
 ZCwgTElCVVNCX0VSUk9SX05PX0RFVklDRSBpZiB0aGUgZGV2aWNlIGhhcyBi
 ZWVuDQogZGlzY29ubmVjdGVkIGFuZCBMSUJVU0JfRVJST1Igb24gZmFpbHVy
 ZS4NCi0uDQogLlBwDQotLg0KIC5GdCBpbnQNCiAuRm4gbGlidXNiX3NldF9p
 bnRlcmZhY2VfYWx0X3NldHRpbmcgImxpYnVzYl9kZXZpY2VfaGFuZGxlICpk
 ZXYiICJpbnQgaW50ZXJmYWNlX251bWJlciIgImludCBhbHRlcm5hdGVfc2V0
 dGluZyINCi1BY3RpdmF0ZSBhbiBhbHRlcm5hdGUgc2V0dGluZyBmb3IgYW4g
 aW50ZXJmYWNlLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgDQotTElCVVNCX0VS
 Uk9SX05PVF9GT1VORCBpZiB0aGUgaW50ZXJmYWNlIHdhcyBub3QgY2xhaW1l
 ZCBvciB0aGUgcmVxdWVzdGVkIA0KLXNldHRpbmcgZG9lcyBub3QgZXhpc3Qs
 IExJQlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgdGhlIGRldmljZSBoYXMgYmVl
 biANCitBY3RpdmF0ZSBhbiBhbHRlcm5hdGUgc2V0dGluZyBmb3IgYW4gaW50
 ZXJmYWNlLg0KK1JldHVybnMgMCBvbiBzdWNjZXNzLA0KK0xJQlVTQl9FUlJP
 Ul9OT1RfRk9VTkQgaWYgdGhlIGludGVyZmFjZSB3YXMgbm90IGNsYWltZWQg
 b3IgdGhlIHJlcXVlc3RlZA0KK3NldHRpbmcgZG9lcyBub3QgZXhpc3QsIExJ
 QlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgdGhlIGRldmljZSBoYXMgYmVlbg0K
 IGRpc2Nvbm5lY3RlZCBhbmQgTElCVVNCX0VSUk9SIGNvZGUgb24gZmFpbHVy
 ZS4NCi0uDQogLlBwDQotLg0KIC5GdCBpbnQNCiAuRm4gbGlidXNiX2NsZWFy
 X2hhbHQgImxpYnVzYl9kZXZpY2VfaGFuZGxlICpkZXZoIiAidW5zaWduZWQg
 Y2hhciBlbmRwb2ludCINCi1DbGVhciBhbiBoYWx0L3N0YWxsIGZvciBhIGVu
 ZHBvaW50LiBSZXR1cm5zIDAgb24gc3VjY2VzcywgTElCVVNCX0VSUk9SX05P
 VF9GT1VORA0KLWlmIHRoZSBlbmRwb2ludCBkb2VzIG5vdCBleGlzdCwgTElC
 VVNCX0VSUk9SX05PX0RFVklDRSBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuIA0K
 K0NsZWFyIGFuIGhhbHQvc3RhbGwgZm9yIGEgZW5kcG9pbnQuDQorUmV0dXJu
 cyAwIG9uIHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9OT1RfRk9VTkQNCitpZiB0
 aGUgZW5kcG9pbnQgZG9lcyBub3QgZXhpc3QsIExJQlVTQl9FUlJPUl9OT19E
 RVZJQ0UgaWYgdGhlIGRldmljZSBoYXMgYmVlbg0KIGRpc2Nvbm5lY3RlZCBh
 bmQgYSBMSUJVU0JfRVJST1IgY29kZSBvbiBmYWlsdXJlLg0KLS4NCiAuUHAN
 Ci0uDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfcmVzZXRfZGV2aWNlICJsaWJ1
 c2JfZGV2aWNlX2hhbmRsZSAqZGV2aCINCi1QZXJmb3JtIGFuIFVTQiBwb3J0
 IHJlc2V0IGZvciBhbiB1c2IgZGV2aWNlLiBSZXR1cm5zIDAgb24gc3VjY2Vz
 cywNCitQZXJmb3JtIGFuIFVTQiBwb3J0IHJlc2V0IGZvciBhbiB1c2IgZGV2
 aWNlLg0KK1JldHVybnMgMCBvbiBzdWNjZXNzLA0KIExJQlVTQl9FUlJPUl9O
 T1RfRk9VTkQgaWYgcmUtZW51bWVyYXRpb24gaXMgcmVxdWlyZWQgb3IgaWYg
 dGhlIGRldmljZSBoYXMNCiBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgYSBMSUJV
 U0JfRVJST1IgY29kZSBvbiBmYWlsdXJlLg0KLS4NCiAuUHANCi0uDQogLkZ0
 IGludA0KIC5GbiBsaWJ1c2JfY2hlY2tfY29ubmVjdGVkICJsaWJ1c2JfZGV2
 aWNlX2hhbmRsZSAqZGV2aCINCi1UZXN0IGlmIFVTQiBkZXZpY2UgaXMgc3Rp
 bGwgY29ubmVjdGVkLiBSZXR1cm5zIDAgb24gc3VjY2VzcywNCitUZXN0IGlm
 IFVTQiBkZXZpY2UgaXMgc3RpbGwgY29ubmVjdGVkLg0KK1JldHVybnMgMCBv
 biBzdWNjZXNzLA0KIExJQlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgaGFzIGJl
 ZW4gZGlzY29ubmVjdGVkIGFuZCBhIExJQlVTQl9FUlJPUg0KIGNvZGUgb24g
 ZmFpbHVyZS4NCi0uDQogLlBwDQotLg0KIC5GdCBpbnQNCiAuRm4gbGlidXNi
 X2tlcm5lbF9kcml2ZXJfYWN0aXZlICJsaWJ1c2JfZGV2aWNlX2hhbmRsZSAq
 ZGV2aCIgImludCBpbnRlcmZhY2UiDQotRGV0ZXJtaW5lIGlmIGEgZHJpdmVy
 IGlzIGFjdGl2ZSBvbiBhIGludGVyZmFjZS4gUmV0dXJucyAwIGlmIG5vIGtl
 cm5lbCBkcml2ZXINCi1pcyBhY3RpdmUsIHJldHVybnMgMSBpZiBhIGtlcm5l
 bCBkcml2ZXIgaXMgYWN0aXZlLCByZXR1cm5zIExJQlVTQl9FUlJPUl9OT19E
 RVZJQ0UNCitEZXRlcm1pbmUgaWYgYSBkcml2ZXIgaXMgYWN0aXZlIG9uIGEg
 aW50ZXJmYWNlLg0KK1JldHVybnMgMCBpZiBubyBrZXJuZWwgZHJpdmVyDQor
 aXMgYWN0aXZlLCByZXR1cm5zIDEgaWYgYSBrZXJuZWwgZHJpdmVyIGlzIGFj
 dGl2ZSwNCityZXR1cm5zIExJQlVTQl9FUlJPUl9OT19ERVZJQ0UNCiBpZiB0
 aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgcmV0dXJucyBh
 IExJQlVTQl9FUlJPUiBjb2RlIG9uIGZhaWx1cmUuDQotLg0KIC5QcA0KLS4N
 CiAuRnQgaW50DQogLkZuIGxpYnVzYl9nZXRfZHJpdmVyICJsaWJ1c2JfZGV2
 aWNlX2hhbmRsZSAqZGV2aCIgImludCBpbnRlcmZhY2UiICJjaGFyICpuYW1l
 IiAiaW50IG5hbWVsZW4iDQogb3INCkBAIC0yODQsOSArMjM1LDcgQEANCiBU
 aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkNCiAuRmEgbmFtZQ0KIGlzIG9ubHkg
 emVybyB0ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MuDQotLg0KIC5QcA0KLS4NCiAu
 RnQgaW50DQogLkZuIGxpYnVzYl9kZXRhY2hfa2VybmVsX2RyaXZlciAibGli
 dXNiX2RldmljZV9oYW5kbGUgKmRldmgiICJpbnQgaW50ZXJmYWNlIg0KIG9y
 DQpAQCAtMjk1LDY5ICsyNDQsNjYgQEANCiBEZXRhY2ggYSBrZXJuZWwgZHJp
 dmVyIGZyb20gYW4gaW50ZXJmYWNlLg0KIFRoaXMgaXMgbmVlZGVkIHRvIGNs
 YWltIGFuIGludGVyZmFjZSByZXF1aXJlZCBieSBhIGtlcm5lbCBkcml2ZXIu
 DQogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9OT1RfRk9V
 TkQgaWYgbm8ga2VybmVsIGRyaXZlciB3YXMgYWN0aXZlLA0KLUxJQlVTQl9F
 UlJPUl9JTlZBTElEX1BBUkFNIGlmIHRoZSBpbnRlcmZhY2UgZG9lcyBub3Qg
 ZXhpc3QsIExJQlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgdGhlIGRldmljZSBo
 YXMgYmVlbiBkaXNjb25uZWN0ZWQgYW5kIGEgTElCVVNCX0VSUk9SIGNvZGUg
 b24gZmFpbHVyZS4gVGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGUuDQot
 Lg0KK0xJQlVTQl9FUlJPUl9JTlZBTElEX1BBUkFNIGlmIHRoZSBpbnRlcmZh
 Y2UgZG9lcyBub3QgZXhpc3QsDQorTElCVVNCX0VSUk9SX05PX0RFVklDRSBp
 ZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZA0KK2FuZCBhIExJ
 QlVTQl9FUlJPUiBjb2RlIG9uIGZhaWx1cmUuDQorVGhpcyBmdW5jdGlvbiBp
 cyBub24tcG9ydGFibGUuDQogLlBwDQotLg0KIC5GdCBpbnQNCiAuRm4gbGli
 dXNiX2F0dGFjaF9rZXJuZWxfZHJpdmVyICJsaWJ1c2JfZGV2aWNlX2hhbmRs
 ZSAqZGV2aCIgImludCBpbnRlcmZhY2UiDQotUmUtYXR0YWNoIGFuIGludGVy
 ZmFjZSBrZXJuZWwgZHJpdmVyIHByZXZpb3VzbHkgZGV0YWNoZWQuIFJldHVy
 bnMgMCBvbiBzdWNjZXNzLCANCi1MSUJVU0JfRVJST1JfSU5WQUxJRF9QQVJB
 TSBpZiB0aGUgaW50ZXJmYWNlIGRvZXMgbm90IGV4aXN0LCBMSUJVU0JfRVJS
 T1JfTk9fREVWSUNFDQotaWYgdGhlIGRldmljZSBoYXMgYmVlbiBkaXNjb25u
 ZWN0LCBMSUJVU0JfRVJST1JfQlVTWSBpZiB0aGUgZHJpdmVyIGNhbm5vdCBi
 ZSANCi1hdHRhY2hlZCBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgaXMgY2xhaW1l
 ZCBieSBhIHByb2dyYW0gb3IgZHJpdmVyIGFuZCBhIA0KK1JlLWF0dGFjaCBh
 biBpbnRlcmZhY2Uga2VybmVsIGRyaXZlciBwcmV2aW91c2x5IGRldGFjaGVk
 Lg0KK1JldHVybnMgMCBvbiBzdWNjZXNzLA0KK0xJQlVTQl9FUlJPUl9JTlZB
 TElEX1BBUkFNIGlmIHRoZSBpbnRlcmZhY2UgZG9lcyBub3QgZXhpc3QsDQor
 TElCVVNCX0VSUk9SX05PX0RFVklDRQ0KK2lmIHRoZSBkZXZpY2UgaGFzIGJl
 ZW4gZGlzY29ubmVjdCwgTElCVVNCX0VSUk9SX0JVU1kgaWYgdGhlIGRyaXZl
 ciBjYW5ub3QgYmUNCithdHRhY2hlZCBiZWNhdXNlIHRoZSBpbnRlcmZhY2Ug
 aXMgY2xhaW1lZCBieSBhIHByb2dyYW0gb3IgZHJpdmVyIGFuZCBhDQogTElC
 VVNCX0VSUk9SIGNvZGUgb24gZmFpbHVyZS4NCi0uDQogLlBwDQotLg0KIC5T
 aCBVU0IgREVTQ1JJUFRPUlMNCi0uDQogLlBwDQotLg0KIC5GdCBpbnQNCiAu
 Rm4gbGlidXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvciAibGlidXNiX2Rldmlj
 ZSAqZGV2IiAibGlidXNiX2RldmljZV9kZXNjcmlwdG9yICpkZXNjIg0KIEdl
 dCB0aGUgVVNCIGRldmljZSBkZXNjcmlwdG9yIGZvciB0aGUgZGV2aWNlDQog
 LkZhIGRldi4NCi1UaGlzIGlzIGEgbm9uLWJsb2NraW5nIGZ1bmN0aW9uLiBS
 ZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgYSBMSUJVU0JfRVJST1IgY29kZSBv
 biANCitUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGZ1bmN0aW9uLg0KK1JldHVy
 bnMgMCBvbiBzdWNjZXNzIGFuZCBhIExJQlVTQl9FUlJPUiBjb2RlIG9uDQog
 ZmFpbHVyZS4NCi0uDQogLlBwDQotLkZ0IGludCANCisuRnQgaW50DQogLkZu
 IGxpYnN1Yl9nZXRfYWN0aXZlX2NvbmZpZ19kZXNjcmlwdG9yICJsaWJ1c2Jf
 ZGV2aWNlICpkZXYiICJzdHJ1Y3QgbGlidXNiX2NvbmZpZ19kZXNjcmlwdG9y
 ICoqY29uZmlnIg0KLUdldCB0aGUgVVNCIGNvbmZpZ3VyYXRpb24gZGVzY3Jp
 cHRvciBmb3IgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uLiBSZXR1cm5zIDAg
 b24gDQotc3VjY2VzcywgcmV0dXJucyBMSUJVU0JfRVJST1JfTk9UX0ZPVU5E
 IGlmIHRoZSBkZXZpY2UgaXMgaW4gdW5jb25maWd1cmVkIHN0YXRlIA0KK0dl
 dCB0aGUgVVNCIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBmb3IgdGhlIGFj
 dGl2ZSBjb25maWd1cmF0aW9uLg0KK1JldHVybnMgMCBvbg0KK3N1Y2Nlc3Ms
 IHJldHVybnMgTElCVVNCX0VSUk9SX05PVF9GT1VORCBpZiB0aGUgZGV2aWNl
 IGlzIGluIHVuY29uZmlndXJlZCBzdGF0ZQ0KIGFuZCByZXR1cm5zIGFub3Ro
 ZXIgTElCVVNCX0VSUk9SIGNvZGUgb24gZXJyb3IuDQotLg0KIC5QcA0KLS5G
 dCBpbnQgDQorLkZ0IGludA0KIC5GbiBsaWJ1c2JfZ2V0X2NvbmZpZ19kZXNj
 cmlwdG9yICJsaWJ1c2JfZGV2aWNlICpkZXYiICJ1aW50OF90IGNvbmZpZ19p
 bmRleCIgImxpYnVzYl9jb25maWdfZGVzY3JpcHRvciAqKmNvbmZpZyINCi1H
 ZXQgVVNCIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBiYXNlZCBvbiBpdHMg
 aW5kZXggDQorR2V0IFVTQiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgYmFz
 ZWQgb24gaXRzIGluZGV4DQogLkZhIGlkeC4NCi1SZXR1cm5zIDAgb24gc3Vj
 Y2VzcywgTElCVVNCX0VSUk9SX05PVF9GT1VORCBpZiB0aGUgY29uZmlndXJh
 dGlvbiBkb2VzIG5vdCBleGlzdCANCitSZXR1cm5zIDAgb24gc3VjY2Vzcywg
 TElCVVNCX0VSUk9SX05PVF9GT1VORCBpZiB0aGUgY29uZmlndXJhdGlvbiBk
 b2VzIG5vdCBleGlzdA0KIGFuZCByZXR1cm5zIGFub3RoZXIgTElCVVNCX0VS
 Uk9SIGNvZGUgb24gZXJyb3IuDQotLg0KIC5QcA0KIC5GdCBpbnQNCiAuRm4g
 bGlidXNiX2dldF9jb25maWdfZGVzY3JpcHRvcl9ieV92YWx1ZSAibGlidXNi
 X2RldmljZSAqZGV2IiAidWludDggYkNvbmZpZ3VyYXRpb25WYWx1ZSIgImxp
 YnVzYl9jb25maWdfZGVzY3JpcHRvciAqKmNvbmZpZyINCi1HZXQgYSBVU0Ig
 Y29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIHdpdGggYSBzcGVjaWZpYyBiQ29u
 ZmlndXJhdGlvblZhbHVlLiBUaGlzIGlzIA0KLWEgbm9uLWJsb2NraW5nIGZ1
 bmN0aW9uIHdoaWNoIGRvZXMgbm90IHNlbmQgcmVxdWVzdCB0aHJvdWdoIHRo
 ZSBkZXZpY2UuIFJldHVybnMgMCANCi1vbiBzdWNjZXNzLCBMSUJVU0JfRVJS
 T1JfTk9UX0ZPVU5EIGlmIHRoZSBjb25maWd1cmF0aW9uIGRvZXMgbm90IGV4
 aXN0IGFuZCBhbm90aGVyIA0KK0dldCBhIFVTQiBjb25maWd1cmF0aW9uIGRl
 c2NyaXB0b3Igd2l0aCBhIHNwZWNpZmljIGJDb25maWd1cmF0aW9uVmFsdWUu
 DQorVGhpcyBpcw0KK2Egbm9uLWJsb2NraW5nIGZ1bmN0aW9uIHdoaWNoIGRv
 ZXMgbm90IHNlbmQgcmVxdWVzdCB0aHJvdWdoIHRoZSBkZXZpY2UuDQorUmV0
 dXJucyAwDQorb24gc3VjY2VzcywgTElCVVNCX0VSUk9SX05PVF9GT1VORCBp
 ZiB0aGUgY29uZmlndXJhdGlvbg0KK2RvZXMgbm90IGV4aXN0IGFuZCBhbm90
 aGVyDQogTElCVVNCX0VSUk9SIGNvZGUgb24gZmFpbHVyZS4NCi0uDQogLlBw
 DQogLkZ0IHZvaWQNCiAuRm4gbGlidXNiX2ZyZWVfY29uZmlnX2Rlc2NyaXB0
 b3IgImxpYnVzYl9jb25maWdfZGVzY3JpcHRvciAqY29uZmlnIg0KIEZyZWUg
 YSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IuDQotLg0KIC5QcA0KIC5GdCBp
 bnQNCiAuRm4gbGlidXNiX2dldF9zdHJpbmdfZGVzY3JpcHRvcl9hc2NpaSAi
 bGlidXNiX2RldmljZV9oYW5kbGUgKmRldmgiICJ1aW50OF90IGRlc2NfaWR4
 IiAidW5zaWduZWQgY2hhciAqZGF0YSIgImludCBsZW5ndGgiDQogUmV0cmll
 dmUgYSBzdHJpbmcgZGVzY3JpcHRvciBpbiBDIHN0eWxlIGFzY2lpLg0KLVJl
 dHVybnMgYSBwb3NpdGl2ZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHJlc3Vs
 dGluZyBBU0NJSSBzdHJpbmcgb24gc3VjY2VzcyBhbmQgYSBMSUJVU0JfRVJS
 T1IgY29kZSBvbiBmYWlsdXJlLg0KLS4NCitSZXR1cm5zIGEgcG9zaXRpdmUg
 bnVtYmVyIG9mIGJ5dGVzIGluIHRoZSByZXN1bHRpbmcgQVNDSUkgc3RyaW5n
 DQorb24gc3VjY2VzcyBhbmQgYSBMSUJVU0JfRVJST1IgY29kZSBvbiBmYWls
 dXJlLg0KIC5QcA0KLS4NCiAuU2ggVVNCIEFTWU5DSFJPTk9VUyBJL08NCi0u
 DQogLlBwDQogLkZ0IHN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIgKg0KIC5GbiBs
 aWJ1c2JfYWxsb2NfdHJhbnNmZXIgImludCBpc29fcGFja2V0cyINCkBAIC0z
 NjUsMjggKzMxMSwyNCBAQA0KIC5GYSBpc29fcGFja2V0cw0KIG51bWJlcnMg
 b2YgaXNvY2hyb25vdXMgcGFja2V0IGRlc2NyaXB0b3JzLg0KIFJldHVybnMg
 TlVMTCBvbiBlcnJvci4NCi0uDQogLlBwDQogLkZ0IHZvaWQNCiAuRm4gbGli
 dXNiX2ZyZWVfdHJhbnNmZXIgInN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIgKnRy
 Ig0KIEZyZWUgYSB0cmFuc2Zlci4NCi0uDQogLlBwDQogLkZ0IGludA0KIC5G
 biBsaWJ1c2Jfc3VibWl0X3RyYW5zZmVyICJzdHJ1Y3QgbGlidXNiX3RyYW5z
 ZmVyICp0ciINCiBUaGlzIGZ1bmN0aW9uIHdpbGwgc3VibWl0IGEgdHJhbnNm
 ZXIgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuDQotUmV0dXJucyAwIG9uIHN1
 Y2Nlc3MsIExJQlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgdGhlIGRldmljZSBo
 YXMgYmVlbiBkaXNjb25uZWN0ZWQgYW5kIA0KK1JldHVybnMgMCBvbiBzdWNj
 ZXNzLCBMSUJVU0JfRVJST1JfTk9fREVWSUNFIGlmDQordGhlIGRldmljZSBo
 YXMgYmVlbiBkaXNjb25uZWN0ZWQgYW5kDQogTElCVVNCX0VSUk9SIGNvZGUg
 b24gb3RoZXIgZmFpbHVyZS4NCi0uDQogLlBwDQogLkZ0IGludA0KIC5GbiBs
 aWJ1c2JfY2FuY2VsX3RyYW5zZmVyICJzdHJ1Y3QgbGlidXNiX3RyYW5zZmVy
 ICp0ciINCiBUaGlzIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5IGNhbmNlbCBh
 IHRyYW5zZmVyLg0KIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBMSUJVU0Jf
 RVJST1IgY29kZSBvbiBmYWlsdXJlLg0KLS4NCiAuUHANCiAuU2ggVVNCIFNZ
 TkNIUk9OT1VTIEkvTw0KLS4NCiAuUHANCiAuRnQgaW50DQogLkZuIGxpYnVz
 Yl9jb250cm9sX3RyYW5zZmVyICJsaWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2
 aCIgInVpbnQ4X3QgYm1SZXF1ZXN0VHlwZSIgInVpbnQ4X3QgYlJlcXVlc3Qi
 ICJ1aW50MTZfdCB3VmFsdWUiICJ1aW50MTZfdCB3SW5kZXgiICJ1bnNpZ25l
 ZCBjaGFyICpkYXRhIiAidWludDE2X3Qgd0xlbmd0aCIgInVuc2lnbmVkIGlu
 dCB0aW1lb3V0Ig0KQEAgLTQwMCwxMjUgKzM0MiwxMjEgQEANCiBjb250cm9s
 IHJlcXVlc3Qgd2FzIG5vdCBzdXBwb3J0ZWQsIExJQlVTQl9FUlJPUl9OT19E
 RVZJQ0UgaWYgdGhlDQogZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBv
 ciBhbm90aGVyIExJQlVTQl9FUlJPUiBjb2RlIG9uIG90aGVyIGZhaWx1cmVz
 Lg0KIFRoZSBsaWJ1c2IgZXJyb3IgY29kZXMgYXJlIGFsd2F5cyBuZWdhdGl2
 ZS4NCi0uDQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfYnVsa190cmFu
 c2ZlciAic3RydWN0IGxpYnVzYl9kZXZpY2VfaGFuZGxlICpkZXZoIiAidW5z
 aWduZWQgY2hhciBlbmRwb2ludCIgInVuc2lnbmVkIGNoYXIgKmRhdGEiICJp
 bnQgbGVuZ3RoIiAiaW50ICp0cmFuc2ZlcnJlZCIgInVuc2lnbmVkIGludCB0
 aW1lb3V0Ig0KIFBlcmZvcm0gYW4gVVNCIGJ1bGsgdHJhbnNmZXIuDQogQSB0
 aW1lb3V0IHZhbHVlIG9mIHplcm8gbWVhbnMgbm8gdGltZW91dC4NCiBUaGUg
 dGltZW91dCB2YWx1ZSBpcyBnaXZlbiBpbiBtaWxsaXNlY29uZHMuDQotUmV0
 dXJucyAwIG9uIHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9USU1FT1VUIA0KLWlm
 IHRoZSB0cmFuc2ZlciB0aW1lb3V0LCBMSUJVU0JfRVJST1JfUElQRSBpZiB0
 aGUgY29udHJvbCByZXF1ZXN0IHdhcyBub3QgDQotc3VwcG9ydGVkLCBMSUJV
 U0JfRVJST1JfT1ZFUkZMT1cgaWYgdGhlIGRldmljZSBvZmZlcmVkIG1vcmUg
 ZGF0YSwgDQotTElCVVNCX0VSUk9SX05PX0RFVklDRSBpZiB0aGUgZGV2aWNl
 IGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgDQorUmV0dXJucyAwIG9uIHN1
 Y2Nlc3MsIExJQlVTQl9FUlJPUl9USU1FT1VUDQoraWYgdGhlIHRyYW5zZmVy
 IHRpbWVvdXQsIExJQlVTQl9FUlJPUl9QSVBFIGlmIHRoZSBjb250cm9sIHJl
 cXVlc3Qgd2FzIG5vdA0KK3N1cHBvcnRlZCwgTElCVVNCX0VSUk9SX09WRVJG
 TE9XIGlmIHRoZSBkZXZpY2Ugb2ZmZXJlZCBtb3JlIGRhdGEsDQorTElCVVNC
 X0VSUk9SX05PX0RFVklDRSBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nv
 bm5lY3RlZCBhbmQNCiBMSUJVU0JfRVJST1IgY29kZSBvbiBvdGhlciBmYWls
 dXJlLg0KLS4NCiAuUHANCiAuRnQgaW50DQogLkZuIGxpYnVzYl9pbnRlcnJ1
 cHRfdHJhbnNmZXIgInN0cnVjdCBsaWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2
 aCIgInVuc2lnbmVkIGNoYXIgZW5kcG9pbnQiICJ1bnNpZ25lZCBjaGFyICpk
 YXRhIiAiaW50IGxlbmd0aCIgImludCAqdHJhbnNmZXJyZWQiICJ1bnNpZ25l
 ZCBpbnQgdGltZW91dCINCiBQZXJmb3JtIGFuIFVTQiBJbnRlcnJ1cHQgdHJh
 bnNmZXIuDQogQSB0aW1lb3V0IHZhbHVlIG9mIHplcm8gbWVhbnMgbm8gdGlt
 ZW91dC4NCiBUaGUgdGltZW91dCB2YWx1ZSBpcyBnaXZlbiBpbiBtaWxsaXNl
 Y29uZHMuDQotUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9U
 SU1FT1VUIA0KLWlmIHRoZSB0cmFuc2ZlciB0aW1lb3V0LCBMSUJVU0JfRVJS
 T1JfUElQRSBpZiB0aGUgY29udHJvbCByZXF1ZXN0IHdhcyBub3QgDQotc3Vw
 cG9ydGVkLCBMSUJVU0JfRVJST1JfT1ZFUkZMT1cgaWYgdGhlIGRldmljZSBv
 ZmZlcmVkIG1vcmUgZGF0YSwgDQotTElCVVNCX0VSUk9SX05PX0RFVklDRSBp
 ZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgDQorUmV0
 dXJucyAwIG9uIHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9USU1FT1VUDQoraWYg
 dGhlIHRyYW5zZmVyIHRpbWVvdXQsIExJQlVTQl9FUlJPUl9QSVBFIGlmIHRo
 ZSBjb250cm9sIHJlcXVlc3Qgd2FzIG5vdA0KK3N1cHBvcnRlZCwgTElCVVNC
 X0VSUk9SX09WRVJGTE9XIGlmIHRoZSBkZXZpY2Ugb2ZmZXJlZCBtb3JlIGRh
 dGEsDQorTElCVVNCX0VSUk9SX05PX0RFVklDRSBpZiB0aGUgZGV2aWNlIGhh
 cyBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQNCiBMSUJVU0JfRVJST1IgY29kZSBv
 biBvdGhlciBmYWlsdXJlLg0KLS4NCiAuUHANCiAuU2ggVVNCIEVWRU5UUw0K
 LS4NCiAuUHANCiAuRnQgaW50DQogLkZuIGxpYnVzYl90cnlfbG9ja19ldmVu
 dHMgImxpYnVzYl9jb250ZXh0ICpjdHgiDQogVHJ5IHRvIGFjcXVpcmUgdGhl
 IGV2ZW50IGhhbmRsaW5nIGxvY2suDQogUmV0dXJucyAwIGlmIHRoZSBsb2Nr
 IHdhcyBvYnRhaW5lZCBhbmQgMSBpZiBub3QuDQotLg0KIC5QcA0KIC5GdCB2
 b2lkDQogLkZuIGxpYnVzYl9sb2NrX2V2ZW50cyAibGlidXNiX2NvbnRleHQg
 KmN0eCINCi1BY3F1aXJlIHRoZSBldmVudCBoYW5kbGluZyBsb2NrLiBUaGlz
 IGZ1bmN0aW9uIGlzIGJsb2NraW5nLg0KLS4NCitBY3F1aXJlIHRoZSBldmVu
 dCBoYW5kbGluZyBsb2NrLg0KK1RoaXMgZnVuY3Rpb24gaXMgYmxvY2tpbmcu
 DQogLlBwDQogLkZ0IHZvaWQNCiAuRm4gbGlidXNiX3VubG9ja19ldmVudHMg
 ImxpYnVzYl9jb250ZXh0ICpjdHgiDQotUmVsZWFzZSB0aGUgZXZlbnQgaGFu
 ZGxpbmcgbG9jay4gVGhpcyB3aWxsIHdha2UgdXAgYW55IHRocmVhZCBibG9j
 a2VkDQorUmVsZWFzZSB0aGUgZXZlbnQgaGFuZGxpbmcgbG9jay4NCitUaGlz
 IHdpbGwgd2FrZSB1cCBhbnkgdGhyZWFkIGJsb2NrZWQNCiBvbiBsaWJ1c2Jf
 d2FpdF9mb3JfZXZlbnQoKS4NCi0uDQogLlBwDQogLkZ0IGludA0KIC5GbiBs
 aWJ1c2JfZXZlbnRfaGFuZGxpbmdfb2sgImxpYnVzYl9jb250ZXh0ICpjdHgi
 DQotRGV0ZXJtaW5lIGlmIGl0IHN0aWxsIE9LIGZvciB0aGlzIHRocmVhZCB0
 byBiZSBkb2luZyBldmVudCBoYW5kbGluZy4gUmV0dXJucyAxDQotaWYgZXZl
 bnQgaGFuZGxpbmcgY2FuIHN0YXJ0IG9yIGNvbnRpbnVlLiBSZXR1cm5zIDAg
 aWYgdGhpcyB0aHJlYWQgbXVzdCBnaXZlIHVwDQorRGV0ZXJtaW5lIGlmIGl0
 IHN0aWxsIE9LIGZvciB0aGlzIHRocmVhZCB0byBiZSBkb2luZyBldmVudCBo
 YW5kbGluZy4NCitSZXR1cm5zIDENCitpZiBldmVudCBoYW5kbGluZyBjYW4g
 c3RhcnQgb3IgY29udGludWUuDQorUmV0dXJucyAwIGlmIHRoaXMgdGhyZWFk
 IG11c3QgZ2l2ZSB1cA0KIHRoZSBldmVudHMgbG9jay4NCi0uDQogLlBwDQog
 LkZ0IGludA0KIC5GbiBsaWJ1c2JfZXZlbnRfaGFuZGxlcl9hY3RpdmUgImxp
 YnVzYl9jb250ZXh0ICpjdHgiDQotRGV0ZXJtaW5lIGlmIGFuIGFjdGl2ZSB0
 aHJlYWQgaXMgaGFuZGxpbmcgZXZlbnRzLiBSZXR1cm5zIDEgaWYgeWVzIGFu
 ZCAwIGlmIHRoZXJlDQorRGV0ZXJtaW5lIGlmIGFuIGFjdGl2ZSB0aHJlYWQg
 aXMgaGFuZGxpbmcgZXZlbnRzLg0KK1JldHVybnMgMSBpZiB5ZXMgYW5kIDAg
 aWYgdGhlcmUNCiBhcmUgbm8gdGhyZWFkcyBjdXJyZW50bHkgaGFuZGxpbmcg
 ZXZlbnRzLg0KLS4NCiAuUHANCiAuRnQgdm9pZA0KIC5GbiBsaWJ1c2JfbG9j
 a19ldmVudF93YWl0ZXJzICJsaWJ1c2JfY29udGV4dCAqY3R4Ig0KLUFjcXVp
 cmUgdGhlIGV2ZW50X3dhaXRlcnMgbG9jay4gVGhpcyBsb2NrIGlzIGRlc2ln
 bmVkIHRvIGJlIG9idGFpbmVkIHVuZGVyIHRoZQ0KK0FjcXVpcmUgdGhlIGV2
 ZW50X3dhaXRlcnMgbG9jay4NCitUaGlzIGxvY2sgaXMgZGVzaWduZWQgdG8g
 YmUgb2J0YWluZWQgdW5kZXIgdGhlDQogc2l0dWF0aW9uIHdoZXJlIHlvdSB3
 YW50IHRvIGJlIGF3YXJlIHdoZW4gZXZlbnRzIGFyZSBjb21wbGV0ZWQsIGJ1
 dCBzb21lIG90aGVyDQogdGhyZWFkIGlzIGV2ZW50IGhhbmRsaW5nIHNvIGNh
 bGxpbmcgbGlidXNiX2hhbmRsZV9ldmVudHMoKSBpcyBub3QgYWxsb3dlZC4N
 Ci0uDQogLlBwDQogLkZ0IHZvaWQNCiAuRm4gbGlidXNiX3VubG9ja19ldmVu
 dF93YWl0ZXJzICJsaWJ1c2JfY29udGV4dCAqY3R4Ig0KIFJlbGVhc2UgdGhl
 IGV2ZW50X3dhaXRlcnMgbG9jay4NCi0uDQogLlBwDQotLkZ0IGludCANCisu
 RnQgaW50DQogLkZuIGxpYnVzYl93YWl0X2Zvcl9ldmVudCAibGlidXNiX2Nv
 bnRleHQgKmN0eCIgInN0cnVjdCB0aW1ldmFsICp0diINCi1XYWl0IGZvciBh
 bm90aGVyIHRocmVhZCB0byBzaWduYWwgY29tcGxldGlvbiBvZiBhbiBldmVu
 dC4gTXVzdCBiZSBjYWxsZWQNCi13aXRoIHRoZSBldmVudCB3YWl0ZXJzIGxv
 Y2sgaGVsZCwgc2VlIGxpYnVzYl9sb2NrX2V2ZW50X3dhaXRlcnMoKS4gVGhp
 cyB3aWxsDQorV2FpdCBmb3IgYW5vdGhlciB0aHJlYWQgdG8gc2lnbmFsIGNv
 bXBsZXRpb24gb2YgYW4gZXZlbnQuDQorTXVzdCBiZSBjYWxsZWQNCit3aXRo
 IHRoZSBldmVudCB3YWl0ZXJzIGxvY2sgaGVsZCwgc2VlIGxpYnVzYl9sb2Nr
 X2V2ZW50X3dhaXRlcnMoKS4NCitUaGlzIHdpbGwNCiBibG9jayB1bnRpbCB0
 aGUgdGltZW91dCBleHBpcmVzIG9yIGEgdHJhbnNmZXIgY29tcGxldGVzIG9y
 IGEgdGhyZWFkIHJlbGVhc2VzDQotdGhlIGV2ZW50IGhhbmRsaW5nIGxvY2sg
 dGhyb3VnaCBsaWJ1c2JfdW5sb2NrX2V2ZW50cygpLiBSZXR1cm5zIDAgYWZ0
 ZXIgYSANCit0aGUgZXZlbnQgaGFuZGxpbmcgbG9jayB0aHJvdWdoIGxpYnVz
 Yl91bmxvY2tfZXZlbnRzKCkuDQorUmV0dXJucyAwIGFmdGVyIGENCiB0cmFu
 c2ZlciBjb21wbGV0ZXMgb3IgYW5vdGhlciB0aHJlYWQgc3RvcHMgZXZlbnQg
 aGFuZGxpbmcsIHJldHVybnMgMSBpZiB0aGUNCiB0aW1lb3V0IGV4cGlyZWQu
 DQotLg0KIC5QcA0KIC5GdCBpbnQNCiAuRm4gbGlidXNiX2hhbmRsZV9ldmVu
 dHNfdGltZW91dCAibGlidXNiX2NvbnRleHQgKmN0eCIgInN0cnVjdCB0aW1l
 dmFsICp0diINCi1IYW5kbGUgYW55IHBlbmRpbmcgZXZlbnRzIGJ5IGNoZWNr
 aW5nIGlmIHRpbWVvdXRzIGhhdmUgZXhwaXJlZCBhbmQgYnkgDQotY2hlY2tp
 bmcgdGhlIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzIGZvciBhY3Rpdml0eS4g
 UmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGENCitIYW5kbGUgYW55IHBlbmRp
 bmcgZXZlbnRzIGJ5IGNoZWNraW5nIGlmIHRpbWVvdXRzIGhhdmUgZXhwaXJl
 ZCBhbmQgYnkNCitjaGVja2luZyB0aGUgc2V0IG9mIGZpbGUgZGVzY3JpcHRv
 cnMgZm9yIGFjdGl2aXR5Lg0KK1JldHVybnMgMCBvbiBzdWNjZXNzLCBvciBh
 DQogTElCVVNCX0VSUk9SIGNvZGUgb24gZmFpbHVyZS4NCi0uDQogLlBwDQog
 LkZ0IGludA0KIC5GbiBsaWJ1c2JfaGFuZGxlX2V2ZW50cyAibGlidXNiX2Nv
 bnRleHQgKmN0eCINCi1IYW5kbGUgYW55IHBlbmRpbmcgZXZlbnRzIGluIGJs
 b2NraW5nIG1vZGUgd2l0aCBhIHNlbnNpYmxlIHRpbWVvdXQuIFJldHVybnMg
 MA0KK0hhbmRsZSBhbnkgcGVuZGluZyBldmVudHMgaW4gYmxvY2tpbmcgbW9k
 ZSB3aXRoIGEgc2Vuc2libGUgdGltZW91dC4NCitSZXR1cm5zIDANCiBvbiBz
 dWNjZXNzLCByZXR1cm5zIGEgTElCVVNCX0VSUk9SIGNvZGUgb24gZmFpbHVy
 ZS4NCi0uDQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfaGFuZGxlX2V2
 ZW50c19sb2NrZWQgImxpYnVzYl9jb250ZXh0ICpjdHgiICJzdHJ1Y3QgdGlt
 ZXZhbCAqdHYiDQogSGFuZGxlIGFueSBwZW5kaW5nIGV2ZW50cyBieSBwb2xs
 aW5nIGZpbGUgZGVzY2lwdG9ycywgd2l0aG91dCBjaGVja2luZyBpZg0KLWFu
 b3RoZXIgdGhyZWFkcyBhcmUgYWxyZWFkeSBkb2luZyBzby4gTXVzdCBiZSBj
 YWxsZWQgd2l0aCB0aGUgZXZlbnQgbG9jayBoZWxkLg0KLS4NCithbm90aGVy
 IHRocmVhZHMgYXJlIGFscmVhZHkgZG9pbmcgc28uDQorTXVzdCBiZSBjYWxs
 ZWQgd2l0aCB0aGUgZXZlbnQgbG9jayBoZWxkLg0KIC5QcA0KIC5GdCBpbnQN
 CiAuRm4gbGlidXNiX2dldF9uZXh0X3RpbWVvdXQgImxpYnVzYl9jb250ZXh0
 ICpjdHgiICJzdHJ1Y3QgdGltZXZhbCAqdHYiDQotRGV0ZXJtaW5lIHRoZSBu
 ZXh0IGludGVybmFsIHRpbWVvdXQgdGhhdCBsaWJ1c2IgbmVlZHMgdG8gaGFu
 ZGxlLiBSZXR1cm5zIDANCitEZXRlcm1pbmUgdGhlIG5leHQgaW50ZXJuYWwg
 dGltZW91dCB0aGF0IGxpYnVzYiBuZWVkcyB0byBoYW5kbGUuDQorUmV0dXJu
 cyAwDQogaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGltZW91dHMsIDEgaWYg
 YSB0aW1lb3V0IHdhcyByZXR1cm5lZCwgb3IgTElCVVNCX0VSUk9SDQogY29k
 ZSBvbiBmYWlsdXJlLg0KLS4NCiAuUHANCiAuRnQgdm9pZA0KIC5GbiBsaWJ1
 c2Jfc2V0X3BvbGxmZF9ub3RpZmllcnMgImxpYnVzYl9jb250ZXh0ICpjdHgi
 ICJsaWJ1c2JfcG9sbGZkX2FkZGVkX2NiIGFkZGVkX2NiIiAibGlidXNiX3Bv
 bGxmZF9yZW1vdmVkX2NiIHJlbW92ZV9jYiIgInZvaWQgKnVzZXJfZGF0YSIN
 CiBSZWdpc3RlciBub3RpZmljYXRpb24gZnVuY3Rpb25zIGZvciBmaWxlIGRl
 c2NyaXB0b3IgYWRkaXRpb25zL3JlbW92YWxzLg0KIFRoZXNlIGZ1bmN0aW9u
 cyB3aWxsIGJlIGludm9rZWQgZm9yIGV2ZXJ5IG5ldyBvciByZW1vdmVkIGZp
 bGUgZGVzY3JpcHRvcg0KIHRoYXQgbGlidXNiIHVzZXMgYXMgYW4gZXZlbnQg
 c291cmNlLg0KLS4NCiAuUHANCiAuRnQgY29uc3Qgc3RydWN0IGxpYnVzYl9w
 b2xsZmQgKioNCiAuRm4gbGlidXNiX2dldF9wb2xsZmRzICJsaWJ1c2JfY29u
 dGV4dCAqY3R4Ig0KLVJldHJpdmUgYSBsaXN0IG9mIGZpbGUgZGVzY3JpcHRv
 cnMgdGhhdCBzaG91bGQgYmUgcG9sbGVkIGJ5IHlvdXIgbWFpbiBsb29wIGFz
 IA0KLWxpYnVzYiBldmVudCBzb3VyY2VzLiBSZXR1cm5zIGEgTlVMTC10ZXJt
 aW5hdGVkIGxpc3Qgb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuDQot
 Lg0KK1JldHJpdmUgYSBsaXN0IG9mIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCBz
 aG91bGQgYmUgcG9sbGVkIGJ5IHlvdXIgbWFpbiBsb29wIGFzDQorbGlidXNi
 IGV2ZW50IHNvdXJjZXMuDQorUmV0dXJucyBhIE5VTEwtdGVybWluYXRlZCBs
 aXN0IG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBmYWlsdXJlLg0KIC5TaCBMSUJV
 U0IgVkVSU0lPTiAwLjEgQ09NUEFUSUJJTElUWQ0KIC5QcA0KIFRoZSBsaWJy
 YXJ5IGlzIGFsc28gY29tcGxpYW50IHdpdGggTGliVVNCIHZlcnNpb24gMC4x
 LjEyLg0KQEAgLTU1NSwxNiArNDkzLDEzIEBADQogLkZuIHVzYl9jaGVja19j
 b25uZWN0ZWQNCiAuRm4gdXNiX2dldF9kcml2ZXJfbnANCiAuRm4gdXNiX2Rl
 dGFjaF9rZXJuZWxfZHJpdmVyX25wDQotLg0KIC5TaCBTRUUgQUxTTw0KIC5Y
 ciBsaWJ1c2IyMCAzICwNCiAuWHIgdXNiIDQgLA0KIC5YciB1c2Jjb25maWcg
 OA0KIC5QcA0KIC5QYSBodHRwOi8vbGlidXNiLnNvdXJjZWZvcmdlLm5ldC8N
 Ci0uDQogLlNoIEhJU1RPUlkNCi0uDQogLk5tDQogc3VwcG9ydCBmaXJzdCBh
 cHBlYXJlZCBpbg0KIC5GeCA4LjAgLg0K
 
 ---559023410-862053639-1313724716=:7526--

From: Benjamin Kaduk <kaduk@MIT.EDU>
To: bug-followup@freebsd.org
Cc: hps@freebsd.org
Subject: Re: docs/159898: [patch] libusb.3 whitespace, markup, grammar
 fixes
Date: Fri, 19 Aug 2011 11:22:08 -0400 (EDT)

   This message is in MIME format.  The first part should be readable text,
   while the remaining parts are likely unreadable without MIME-aware tools.
 
 ---559023410-2104005412-1313767328=:7526
 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
 
 (was: Re: Fwd: svn commit: r224917 - head/lib/libusb)
 
 On Fri, 19 Aug 2011, Hans Petter Selasky wrote:
 
 > On Friday 19 August 2011 05:40:46 Benjamin Kaduk wrote:
 >> Dear Hans Petter,
 >>
 >> I saw a couple grammar and style issues as this went by, and ended up
 >> going through the whole man page.  Could you take a look at docs/159898
 >> and make sure I didn't change anything factually incorrectly?
 >>
 >> Thanks,
 >>
 >> Ben Kaduk
 >
 > Looks good!
 >
 > One more change I would suggest:
 >
 > +A convenience function to open a device with vendor and producd IDs
 >
 > Into:
 >
 > +A convenience function to open a device by vendor and product IDs
 >
 > --HPS
 >
 
 Updated patch with comments from hps -- thanks for catching it!
 
 -Ben
 ---559023410-2104005412-1313767328=:7526
 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=libusb.3.diff.txt
 Content-Transfer-Encoding: BASE64
 Content-ID: <alpine.GSO.1.10.1108191122080.7526@multics.mit.edu>
 Content-Description: 
 Content-Disposition: attachment; filename=libusb.3.diff.txt
 
 LS0tIGxpYnVzYi4zLndoaXRlc3BhY2UJMjAxMS0wOC0xOCAxMzo0Mjo0OC4w
 MDAwMDAwMDAgLTA0MDANCisrKyBsaWJ1c2IuMwkyMDExLTA4LTE5IDExOjE4
 OjQ1LjAwMDAwMDAwMCAtMDQwMA0KQEAgLTMzLDcgKzMzLDggQEANCiAuTm0g
 bGlidXNiDQogLk5kICJVU0IgYWNjZXNzIGxpYnJhcnkiDQogLlNoIExJQlJB
 UlkNCi1VU0IgYWNjZXNzIGxpYnJhcnkgKGxpYnVzYiAtbHVzYikNCitVU0Ig
 YWNjZXNzIGxpYnJhcnkNCisuUHEgbGlidXNiLCAtbHVzYg0KIC5TaCBTWU5P
 UFNJUw0KIC5JbiBsaWJ1c2IuaA0KIC5TaCBERVNDUklQVElPTg0KQEAgLTQ2
 LDggKzQ3LDggQEANCiAuRnQgaW50DQogLkZuIGxpYnVzYl9pbml0IGxpYnVz
 Yl9jb250ZXh0ICoqY3R4DQogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXNlcyBs
 aWJ1c2IuDQotTXVzdCBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZw0KLW9m
 IHRoZSBwcm9ncmFtLg0KK0l0IG11c3QgYmUgY2FsbGVkIGF0IHRoZSBiZWdp
 bm5pbmcNCitvZiB0aGUgcHJvZ3JhbSwgYmVmb3JlIG90aGVyIGxpYnVzYiBy
 b3V0aW5lcyBhcmUgdXNlZC4NCiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBv
 biBzdWNjZXNzIG9yIExJQlVTQl9FUlJPUiBvbg0KIGZhaWx1cmUuDQogLlBw
 DQpAQCAtNTUsMzUgKzU2LDM5IEBADQogLkZuIGxpYnVzYl9leGl0ICJsaWJ1
 c2JfY29udGV4dCAqY3R4Ig0KIERlaW5pdGlhbGlzZSBsaWJ1c2IuDQogTXVz
 dCBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgYXBwbGljYXRpb24uDQor
 T3RoZXIgbGlidXNiIHJvdXRpbmVzIG1heSBub3QgYmUgY2FsbGVkIGFmdGVy
 IHRoaXMgZnVuY3Rpb24uDQogLlBwDQogLkZ0IGNvbnN0IGNoYXIgKg0KIC5G
 biBsaWJ1c2Jfc3RyZXJyb3IgImludCBjb2RlIg0KLUdldCBBU0NJSSByZXBy
 ZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgZ2l2ZW4gYnkgdGhlDQorR2V0IHRo
 ZSBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgZ2l2ZW4gYnkg
 dGhlDQogLkZhIGNvZGUNCiBhcmd1bWVudC4NCiAuUHANCiAuRnQgdm9pZA0K
 IC5GbiBsaWJ1c2Jfc2V0X2RlYnVnICJsaWJ1c2JfY29udGV4dCAqY3R4IiAi
 aW50IGxldmVsIg0KLVNldCBkZWJ1ZyB0byB0aGUNCi0uRmEgbGV2ZWwNCi1s
 ZXZlbC4NCitTZXQgdGhlIGRlYnVnIGxldmVsIHRvDQorLkZhIGxldmVsIC4N
 CiAuUHANCiAuRnQgc3NpemVfdA0KIC5GbiBsaWJ1c2JfZ2V0X2RldmljZV9s
 aXN0ICJsaWJ1c2JfY29udGV4dCAqY3R4IiAibGlidXNiX2RldmljZSAqKips
 aXN0Ig0KLUZpbGwgaW50bw0KK1BvcHVsYXRlDQogLkZhIGxpc3QNCi10aGUg
 bGlzdCBvZiB1c2IgZGV2aWNlIGF2YWlsYWJsZS4NCi1BbGwgdGhlIGRldmlj
 ZSBjcmVhdGVkIGJ5IHRoaXMNCi1mdW5jdGlvbiBtdXN0IGJlIHVucmVmIGFu
 ZCBmcmVlIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhlbS4NCit3aXRoIHRo
 ZSBsaXN0IG9mIHVzYiBkZXZpY2VzIGF2YWlsYWJsZSwgYWRkaW5nIGEgcmVm
 ZXJlbmNlIHRvIGVhY2gNCitkZXZpY2UgaW4gdGhlIGxpc3QuDQorQWxsIHRo
 ZSBsaXN0IGVudHJpZXMgY3JlYXRlZCBieSB0aGlzDQorZnVuY3Rpb24gbXVz
 dCBoYXZlIHRoZWlyIHJlZmVyZW5jZSBjb3VudGVyDQorZGVjcmVtZW50ZWQg
 d2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGVtLA0KK2FuZCB0aGUgbGlzdCBp
 dHNlbGYgbXVzdCBiZSBmcmVlZC4NCiBUaGlzDQotZnVuY3Rpb24gcmV0dXJu
 cyB0aGUgbnVtYmVyIG9mIGRldmljZXMgaW4gbGlzdCBvciBhIExJQlVTQl9F
 UlJPUiBjb2RlLg0KK2Z1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBk
 ZXZpY2VzIGluIHRoZSBsaXN0IG9yIGEgTElCVVNCX0VSUk9SIGNvZGUuDQog
 LlBwDQogLkZ0IHZvaWQNCiAuRm4gbGlidXNiX2ZyZWVfZGV2aWNlX2xpc3Qg
 ImxpYnVzYl9kZXZpY2UgKipsaXN0IiAiaW50IHVucmVmX2RldmljZXMiDQog
 RnJlZSB0aGUgbGlzdCBvZiBkZXZpY2VzIGRpc2NvdmVyZWQgYnkgbGlidXNi
 X2dldF9kZXZpY2VfbGlzdC4NCiBJZg0KIC5GYSB1bnJlZl9kZXZpY2UNCi1p
 cyBzZXQgdG8gMSBhbGwgZGV2aWNlcyBhcmUgdW5yZWYgb25lIHRpbWUuDQor
 aXMgc2V0IHRvIDEgYWxsIGRldmljZXMgaW4gdGhlIGxpc3QgaGF2ZSB0aGVp
 ciByZWZlcmVuY2UNCitjb3VudGVyIGRlY3JlbWVudGVkIG9uY2UuDQogLlBw
 DQogLkZ0IHVpbnQ4X3QNCiAuRm4gbGlidXNiX2dldF9idXNfbnVtYmVyICJs
 aWJ1c2JfZGV2aWNlICpkZXYiDQpAQCAtMTIwLDEzICsxMjUsMTMgQEANCiAu
 Rm4gbGlidXNiX29wZW4gImxpYnVzYl9kZXZpY2UgKmRldiIgImxpYnVzYl9k
 ZXZpY2VfaGFuZGxlICoqZGV2aCINCiBPcGVuIGEgZGV2aWNlIGFuZCBvYnRh
 aW4gYSBkZXZpY2VfaGFuZGxlLg0KIFJldHVybnMgMCBvbiBzdWNjZXNzLA0K
 LUxJQlVTQl9FUlJPUl9OT19NRU0gb24gbWVtb3J5IGFsbG9jYXRpb24gcHJv
 YmxlbSwgTElCVVNCX0VSUk9SX0FDQ0VTUw0KLW9uIHBlcm1pc3Npb24gcHJv
 YmxlbSwgTElCVVNCX0VSUk9SX05PX0RFVklDRSBpZiB0aGUgZGV2aWNlIGhh
 cyBiZWVuDQotZGlzY29ubmVjdGVkIGFuZCBhIExJQlVTQl9FUlJPUiBjb2Rl
 IG9uIGVycm9yLg0KK0xJQlVTQl9FUlJPUl9OT19NRU0gb24gbWVtb3J5IGFs
 bG9jYXRpb24gcHJvYmxlbXMsIExJQlVTQl9FUlJPUl9BQ0NFU1MNCitvbiBw
 ZXJtaXNzaW9ucyBwcm9ibGVtcywgTElCVVNCX0VSUk9SX05PX0RFVklDRSBp
 ZiB0aGUgZGV2aWNlIGhhcyBiZWVuDQorZGlzY29ubmVjdGVkIGFuZCBhIExJ
 QlVTQl9FUlJPUiBjb2RlIG9uIG90aGVyIGVycm9ycy4NCiAuUHANCiAuRnQg
 bGlidXNiX2RldmljZV9oYW5kbGUgKg0KIC5GbiBsaWJ1c2Jfb3Blbl9kZXZp
 Y2Vfd2l0aF92aWRfcGlkICJsaWJ1c2JfY29udGV4dCAqY3R4IiAidWludDE2
 X3QgdmlkIiAidWludDE2X3QgcGlkIg0KLUNvbnZlbmllbmNlIGZ1bmN0aW9u
 IHRvIG9wZW4gYSBkZXZpY2Ugd2l0aCBpcw0KK0EgY29udmVuaWVuY2UgZnVu
 Y3Rpb24gdG8gb3BlbiBhIGRldmljZSBieSB2ZW5kb3IgYW5kIHByb2R1Y3Qg
 SURzDQogLkZhIHZpZA0KIGFuZA0KIC5GYSBwaWQuDQpAQCAtMTUwLDcgKzE1
 NSw3IEBADQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2Jfc2V0X2NvbmZp
 Z3VyYXRpb24gImxpYnVzYl9kZXZpY2VfaGFuZGxlICpkZXZoIiAiaW50IGNv
 bmZpZyINCi1TZXQgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uDQorU2V0IHRo
 ZSBhY3RpdmUgY29uZmlndXJhdGlvbiB0bw0KIC5GYSBjb25maWcNCiBmb3Ig
 dGhlIGRldmljZSBjb250YWluZWQgYnkNCiAuRmEgZGV2aC4NCkBAIC0xNjQs
 MTYgKzE2OSwxNiBAQA0KIENsYWltIGFuIGludGVyZmFjZSBpbiBhIGdpdmVu
 IGxpYnVzYl9oYW5kbGUNCiAuRmEgZGV2aC4NCiBUaGlzIGlzIGEgbm9uLWJs
 b2NraW5nIGZ1bmN0aW9uLg0KLUl0IHJldHVybnMgMCBzdWNjZXNzLCBMSUJV
 U0JfRVJST1JfTk9UX0ZPVU5EDQorSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3Ms
 IExJQlVTQl9FUlJPUl9OT1RfRk9VTkQNCiBpZiB0aGUgcmVxdWVzdGVkIGlu
 dGVyZmFjZSBkb2VzIG5vdCBleGlzdCwgTElCVVNCX0VSUk9SX0JVU1kgaWYg
 YSBwcm9ncmFtIG9yDQogZHJpdmVyIGhhcyBjbGFpbWVkIHRoZSBpbnRlcmZh
 Y2UsIExJQlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgdGhlIGRldmljZSBoYXMN
 CiBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgYSBMSUJVU0JfRVJST1IgY29kZSBv
 biBmYWlsdXJlLg0KIC5QcA0KIC5GdCBpbnQNCiAuRm4gbGlidXNiX3JlbGVh
 c2VfaW50ZXJmYWNlICJsaWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2aCIgImlu
 dCBpbnRlcmZhY2VfbnVtYmVyIg0KLVRoaXMgZnVuY3Rpb24gcmVsZWFzZSBh
 biBpbnRlcmZhY2UuDQotQWxsIHRoZSBjbGFpbWVkIGludGVyZmFjZSBtdXN0
 IGJlIHJlbGVhc2VkDQotYmVmb3JlIGNsb3NpbmcgYSBkZXZpY2UuDQorVGhp
 cyBmdW5jdGlvbiByZWxlYXNlcyBhbiBpbnRlcmZhY2UuDQorQWxsIHRoZSBj
 bGFpbWVkIGludGVyZmFjZXMgb24gYSBkZXZpY2UgbXVzdCBiZSByZWxlYXNl
 ZA0KK2JlZm9yZSBjbG9zaW5nIHRoZSBkZXZpY2UuDQogUmV0dXJucyAwIG9u
 IHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9OT1RfRk9VTkQgaWYgdGhlDQogaW50
 ZXJmYWNlIHdhcyBub3QgY2xhaW1lZCwgTElCVVNCX0VSUk9SX05PX0RFVklD
 RSBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuDQogZGlzY29ubmVjdGVkIGFuZCBM
 SUJVU0JfRVJST1Igb24gZmFpbHVyZS4NCkBAIC0xODQsNyArMTg5LDcgQEAN
 CiBSZXR1cm5zIDAgb24gc3VjY2VzcywNCiBMSUJVU0JfRVJST1JfTk9UX0ZP
 VU5EIGlmIHRoZSBpbnRlcmZhY2Ugd2FzIG5vdCBjbGFpbWVkIG9yIHRoZSBy
 ZXF1ZXN0ZWQNCiBzZXR0aW5nIGRvZXMgbm90IGV4aXN0LCBMSUJVU0JfRVJS
 T1JfTk9fREVWSUNFIGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4NCi1kaXNjb25u
 ZWN0ZWQgYW5kIExJQlVTQl9FUlJPUiBjb2RlIG9uIGZhaWx1cmUuDQorZGlz
 Y29ubmVjdGVkIGFuZCBhIExJQlVTQl9FUlJPUiBjb2RlIG9uIGZhaWx1cmUu
 DQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfY2xlYXJfaGFsdCAibGli
 dXNiX2RldmljZV9oYW5kbGUgKmRldmgiICJ1bnNpZ25lZCBjaGFyIGVuZHBv
 aW50Ig0KQEAgLTIwMiwzMSArMjA3LDMwIEBADQogLlBwDQogLkZ0IGludA0K
 IC5GbiBsaWJ1c2JfY2hlY2tfY29ubmVjdGVkICJsaWJ1c2JfZGV2aWNlX2hh
 bmRsZSAqZGV2aCINCi1UZXN0IGlmIFVTQiBkZXZpY2UgaXMgc3RpbGwgY29u
 bmVjdGVkLg0KK1Rlc3QgaWYgdGhlIFVTQiBkZXZpY2UgaXMgc3RpbGwgY29u
 bmVjdGVkLg0KIFJldHVybnMgMCBvbiBzdWNjZXNzLA0KLUxJQlVTQl9FUlJP
 Ul9OT19ERVZJQ0UgaWYgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGFuZCBhIExJ
 QlVTQl9FUlJPUg0KK0xJQlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgaXQgaGFz
 IGJlZW4gZGlzY29ubmVjdGVkIGFuZCBhIExJQlVTQl9FUlJPUg0KIGNvZGUg
 b24gZmFpbHVyZS4NCiAuUHANCiAuRnQgaW50DQogLkZuIGxpYnVzYl9rZXJu
 ZWxfZHJpdmVyX2FjdGl2ZSAibGlidXNiX2RldmljZV9oYW5kbGUgKmRldmgi
 ICJpbnQgaW50ZXJmYWNlIg0KIERldGVybWluZSBpZiBhIGRyaXZlciBpcyBh
 Y3RpdmUgb24gYSBpbnRlcmZhY2UuDQogUmV0dXJucyAwIGlmIG5vIGtlcm5l
 bCBkcml2ZXINCi1pcyBhY3RpdmUsIHJldHVybnMgMSBpZiBhIGtlcm5lbCBk
 cml2ZXIgaXMgYWN0aXZlLA0KLXJldHVybnMgTElCVVNCX0VSUk9SX05PX0RF
 VklDRQ0KLWlmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGFu
 ZCByZXR1cm5zIGEgTElCVVNCX0VSUk9SIGNvZGUgb24gZmFpbHVyZS4NCitp
 cyBhY3RpdmUsIDEgaWYgYSBrZXJuZWwgZHJpdmVyIGlzIGFjdGl2ZSwgTElC
 VVNCX0VSUk9SX05PX0RFVklDRQ0KK2lmIHRoZSBkZXZpY2UgaGFzIGJlZW4g
 ZGlzY29ubmVjdGVkIGFuZCBhIExJQlVTQl9FUlJPUiBjb2RlIG9uIGZhaWx1
 cmUuDQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfZ2V0X2RyaXZlciAi
 bGlidXNiX2RldmljZV9oYW5kbGUgKmRldmgiICJpbnQgaW50ZXJmYWNlIiAi
 Y2hhciAqbmFtZSIgImludCBuYW1lbGVuIg0KIG9yDQogLkZ0IGludA0KIC5G
 biBsaWJ1c2JfZ2V0X2RyaXZlcl9ucCAibGlidXNiX2RldmljZV9oYW5kbGUg
 KmRldmgiICJpbnQgaW50ZXJmYWNlIiAiY2hhciAqbmFtZSIgImludCBuYW1l
 bGVuIg0KLUdldHMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciBhdHRhY2hlZCB0
 byB0aGUgZ2l2ZW4NCitDb3B5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgYXR0
 YWNoZWQgdG8gdGhlIGdpdmVuDQogLkZhIGRldmljZQ0KIGFuZA0KIC5GYSBp
 bnRlcmZhY2UNCi1pbnRvIHRoZSBidWZmZXIgZ2l2ZW4gYnkNCitpbnRvIHRo
 ZSBidWZmZXINCiAuRmEgbmFtZQ0KLWFuZA0KK29mIGxlbmd0aA0KIC5GYSBu
 YW1lbGVuIC4NCiBSZXR1cm5zIDAgb24gc3VjY2VzcywgTElCVVNCX0VSUk9S
 X05PVF9GT1VORCBpZiBubyBrZXJuZWwgZHJpdmVyIGlzIGF0dGFjaGVkDQog
 dG8gdGhlIGdpdmVuIGludGVyZmFjZSBhbmQgTElCVVNCX0VSUk9SX0lOVkFM
 SURfUEFSQU0gaWYgdGhlIGludGVyZmFjZSBkb2VzDQpAQCAtMjQyLDcgKzI0
 Niw3IEBADQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfZGV0YWNoX2tlcm5lbF9k
 cml2ZXJfbnAgImxpYnVzYl9kZXZpY2VfaGFuZGxlICpkZXZoIiAiaW50IGlu
 dGVyZmFjZSINCiBEZXRhY2ggYSBrZXJuZWwgZHJpdmVyIGZyb20gYW4gaW50
 ZXJmYWNlLg0KLVRoaXMgaXMgbmVlZGVkIHRvIGNsYWltIGFuIGludGVyZmFj
 ZSByZXF1aXJlZCBieSBhIGtlcm5lbCBkcml2ZXIuDQorVGhpcyBpcyBuZWVk
 ZWQgdG8gY2xhaW0gYW4gaW50ZXJmYWNlIGFscmVhZHkgY2xhaW1lZCBieSBh
 IGtlcm5lbCBkcml2ZXIuDQogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIExJQlVT
 Ql9FUlJPUl9OT1RfRk9VTkQgaWYgbm8ga2VybmVsIGRyaXZlciB3YXMgYWN0
 aXZlLA0KIExJQlVTQl9FUlJPUl9JTlZBTElEX1BBUkFNIGlmIHRoZSBpbnRl
 cmZhY2UgZG9lcyBub3QgZXhpc3QsDQogTElCVVNCX0VSUk9SX05PX0RFVklD
 RSBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZA0KQEAgLTI1
 MSwxMSArMjU1LDExIEBADQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2Jf
 YXR0YWNoX2tlcm5lbF9kcml2ZXIgImxpYnVzYl9kZXZpY2VfaGFuZGxlICpk
 ZXZoIiAiaW50IGludGVyZmFjZSINCi1SZS1hdHRhY2ggYW4gaW50ZXJmYWNl
 IGtlcm5lbCBkcml2ZXIgcHJldmlvdXNseSBkZXRhY2hlZC4NCitSZS1hdHRh
 Y2ggYW4gaW50ZXJmYWNlIGtlcm5lbCBkcml2ZXIgdGhhdCB3YXMgcHJldmlv
 dXNseSBkZXRhY2hlZC4NCiBSZXR1cm5zIDAgb24gc3VjY2VzcywNCiBMSUJV
 U0JfRVJST1JfSU5WQUxJRF9QQVJBTSBpZiB0aGUgaW50ZXJmYWNlIGRvZXMg
 bm90IGV4aXN0LA0KIExJQlVTQl9FUlJPUl9OT19ERVZJQ0UNCi1pZiB0aGUg
 ZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3QsIExJQlVTQl9FUlJPUl9CVVNZ
 IGlmIHRoZSBkcml2ZXIgY2Fubm90IGJlDQoraWYgdGhlIGRldmljZSBoYXMg
 YmVlbiBkaXNjb25uZWN0ZWQsIExJQlVTQl9FUlJPUl9CVVNZIGlmIHRoZSBk
 cml2ZXIgY2Fubm90IGJlDQogYXR0YWNoZWQgYmVjYXVzZSB0aGUgaW50ZXJm
 YWNlIGlzIGNsYWltZWQgYnkgYSBwcm9ncmFtIG9yIGRyaXZlciBhbmQgYQ0K
 IExJQlVTQl9FUlJPUiBjb2RlIG9uIGZhaWx1cmUuDQogLlBwDQpAQCAtMjcz
 LDI0ICsyNzcsMjUgQEANCiAuRm4gbGlic3ViX2dldF9hY3RpdmVfY29uZmln
 X2Rlc2NyaXB0b3IgImxpYnVzYl9kZXZpY2UgKmRldiIgInN0cnVjdCBsaWJ1
 c2JfY29uZmlnX2Rlc2NyaXB0b3IgKipjb25maWciDQogR2V0IHRoZSBVU0Ig
 Y29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIGZvciB0aGUgYWN0aXZlIGNvbmZp
 Z3VyYXRpb24uDQogUmV0dXJucyAwIG9uDQotc3VjY2VzcywgcmV0dXJucyBM
 SUJVU0JfRVJST1JfTk9UX0ZPVU5EIGlmIHRoZSBkZXZpY2UgaXMgaW4gdW5j
 b25maWd1cmVkIHN0YXRlDQotYW5kIHJldHVybnMgYW5vdGhlciBMSUJVU0Jf
 RVJST1IgY29kZSBvbiBlcnJvci4NCitzdWNjZXNzLCBMSUJVU0JfRVJST1Jf
 Tk9UX0ZPVU5EIGlmIHRoZSBkZXZpY2UgaXMgaW4NCithbiB1bmNvbmZpZ3Vy
 ZWQgc3RhdGUNCithbmQgYSBMSUJVU0JfRVJST1IgY29kZSBvbiBlcnJvci4N
 CiAuUHANCiAuRnQgaW50DQogLkZuIGxpYnVzYl9nZXRfY29uZmlnX2Rlc2Ny
 aXB0b3IgImxpYnVzYl9kZXZpY2UgKmRldiIgInVpbnQ4X3QgY29uZmlnX2lu
 ZGV4IiAibGlidXNiX2NvbmZpZ19kZXNjcmlwdG9yICoqY29uZmlnIg0KLUdl
 dCBVU0IgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIGJhc2VkIG9uIGl0cyBp
 bmRleA0KK0dldCBhIFVTQiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgYmFz
 ZWQgb24gaXRzIGluZGV4DQogLkZhIGlkeC4NCiBSZXR1cm5zIDAgb24gc3Vj
 Y2VzcywgTElCVVNCX0VSUk9SX05PVF9GT1VORCBpZiB0aGUgY29uZmlndXJh
 dGlvbiBkb2VzIG5vdCBleGlzdA0KLWFuZCByZXR1cm5zIGFub3RoZXIgTElC
 VVNCX0VSUk9SIGNvZGUgb24gZXJyb3IuDQorYW5kIGEgTElCVVNCX0VSUk9S
 IGNvZGUgb24gZXJyb3IuDQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2Jf
 Z2V0X2NvbmZpZ19kZXNjcmlwdG9yX2J5X3ZhbHVlICJsaWJ1c2JfZGV2aWNl
 ICpkZXYiICJ1aW50OCBiQ29uZmlndXJhdGlvblZhbHVlIiAibGlidXNiX2Nv
 bmZpZ19kZXNjcmlwdG9yICoqY29uZmlnIg0KIEdldCBhIFVTQiBjb25maWd1
 cmF0aW9uIGRlc2NyaXB0b3Igd2l0aCBhIHNwZWNpZmljIGJDb25maWd1cmF0
 aW9uVmFsdWUuDQogVGhpcyBpcw0KLWEgbm9uLWJsb2NraW5nIGZ1bmN0aW9u
 IHdoaWNoIGRvZXMgbm90IHNlbmQgcmVxdWVzdCB0aHJvdWdoIHRoZSBkZXZp
 Y2UuDQorYSBub24tYmxvY2tpbmcgZnVuY3Rpb24gd2hpY2ggZG9lcyBub3Qg
 c2VuZCBhIHJlcXVlc3QgdGhyb3VnaCB0aGUgZGV2aWNlLg0KIFJldHVybnMg
 MA0KIG9uIHN1Y2Nlc3MsIExJQlVTQl9FUlJPUl9OT1RfRk9VTkQgaWYgdGhl
 IGNvbmZpZ3VyYXRpb24NCi1kb2VzIG5vdCBleGlzdCBhbmQgYW5vdGhlcg0K
 K2RvZXMgbm90IGV4aXN0IGFuZCBhDQogTElCVVNCX0VSUk9SIGNvZGUgb24g
 ZmFpbHVyZS4NCiAuUHANCiAuRnQgdm9pZA0KQEAgLTI5OSwxNyArMzA0LDE3
 IEBADQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfZ2V0X3N0cmluZ19k
 ZXNjcmlwdG9yX2FzY2lpICJsaWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2aCIg
 InVpbnQ4X3QgZGVzY19pZHgiICJ1bnNpZ25lZCBjaGFyICpkYXRhIiAiaW50
 IGxlbmd0aCINCi1SZXRyaWV2ZSBhIHN0cmluZyBkZXNjcmlwdG9yIGluIEMg
 c3R5bGUgYXNjaWkuDQotUmV0dXJucyBhIHBvc2l0aXZlIG51bWJlciBvZiBi
 eXRlcyBpbiB0aGUgcmVzdWx0aW5nIEFTQ0lJIHN0cmluZw0KK1JldHJpZXZl
 IGEgc3RyaW5nIGRlc2NyaXB0b3IgaW4gQyBzdHlsZSBBU0NJSS4NCitSZXR1
 cm5zIHRoZSBwb3NpdGl2ZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHJlc3Vs
 dGluZyBBU0NJSSBzdHJpbmcNCiBvbiBzdWNjZXNzIGFuZCBhIExJQlVTQl9F
 UlJPUiBjb2RlIG9uIGZhaWx1cmUuDQogLlBwDQogLlNoIFVTQiBBU1lOQ0hS
 T05PVVMgSS9PDQogLlBwDQogLkZ0IHN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIg
 Kg0KIC5GbiBsaWJ1c2JfYWxsb2NfdHJhbnNmZXIgImludCBpc29fcGFja2V0
 cyINCi1BbGxvY2F0ZSBhIHRyYW5zZmVyIHdpdGgNCi0uRmEgaXNvX3BhY2tl
 dHMNCi1udW1iZXJzIG9mIGlzb2Nocm9ub3VzIHBhY2tldCBkZXNjcmlwdG9y
 cy4NCitBbGxvY2F0ZSBhIHRyYW5zZmVyIHdpdGggdGhlIG51bWJlciBvZiBp
 c29jaHJvbm91cyBwYWNrZXQgZGVzY3JpcHRvcnMNCitzcGVjaWZpZWQgYnkN
 CisuRmEgaXNvX3BhY2tldHMgLg0KIFJldHVybnMgTlVMTCBvbiBlcnJvci4N
 CiAuUHANCiAuRnQgdm9pZA0KQEAgLTMyMCwxMyArMzI1LDEzIEBADQogLkZu
 IGxpYnVzYl9zdWJtaXRfdHJhbnNmZXIgInN0cnVjdCBsaWJ1c2JfdHJhbnNm
 ZXIgKnRyIg0KIFRoaXMgZnVuY3Rpb24gd2lsbCBzdWJtaXQgYSB0cmFuc2Zl
 ciBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4NCiBSZXR1cm5zIDAgb24gc3Vj
 Y2VzcywgTElCVVNCX0VSUk9SX05PX0RFVklDRSBpZg0KLXRoZSBkZXZpY2Ug
 aGFzIGJlZW4gZGlzY29ubmVjdGVkIGFuZA0KK3RoZSBkZXZpY2UgaGFzIGJl
 ZW4gZGlzY29ubmVjdGVkIGFuZCBhDQogTElCVVNCX0VSUk9SIGNvZGUgb24g
 b3RoZXIgZmFpbHVyZS4NCiAuUHANCiAuRnQgaW50DQogLkZuIGxpYnVzYl9j
 YW5jZWxfdHJhbnNmZXIgInN0cnVjdCBsaWJ1c2JfdHJhbnNmZXIgKnRyIg0K
 LVRoaXMgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHkgY2FuY2VsIGEgdHJhbnNm
 ZXIuDQotUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIExJQlVTQl9FUlJPUiBj
 b2RlIG9uIGZhaWx1cmUuDQorVGhpcyBmdW5jdGlvbiBhc3luY2hyb25vdXNs
 eSBjYW5jZWxzIGEgdHJhbnNmZXIuDQorUmV0dXJucyAwIG9uIHN1Y2Nlc3Mg
 YW5kIGEgTElCVVNCX0VSUk9SIGNvZGUgb24gZmFpbHVyZS4NCiAuUHANCiAu
 U2ggVVNCIFNZTkNIUk9OT1VTIEkvTw0KIC5QcA0KQEAgLTMzNCwxNCArMzM5
 LDE0IEBADQogLkZuIGxpYnVzYl9jb250cm9sX3RyYW5zZmVyICJsaWJ1c2Jf
 ZGV2aWNlX2hhbmRsZSAqZGV2aCIgInVpbnQ4X3QgYm1SZXF1ZXN0VHlwZSIg
 InVpbnQ4X3QgYlJlcXVlc3QiICJ1aW50MTZfdCB3VmFsdWUiICJ1aW50MTZf
 dCB3SW5kZXgiICJ1bnNpZ25lZCBjaGFyICpkYXRhIiAidWludDE2X3Qgd0xl
 bmd0aCIgInVuc2lnbmVkIGludCB0aW1lb3V0Ig0KIFBlcmZvcm0gYSBVU0Ig
 Y29udHJvbCB0cmFuc2Zlci4NCiBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVy
 IG9mIGJ5dGVzDQotdHJhbnNmZXJyZWQgb24gc3VjY2VzcyBpbiB0aGUgcmFu
 Z2UgZnJvbSBhbmQgaW5jbHVkaW5nIHplcm8gdW50aWwgYW5kDQordHJhbnNm
 ZXJyZWQgb24gc3VjY2VzcywgaW4gdGhlIHJhbmdlIGZyb20gYW5kIGluY2x1
 ZGluZyB6ZXJvIHVwIHRvIGFuZA0KIGluY2x1ZGluZw0KIC5GYSB3TGVuZ3Ro
 IC4NCi1PbiBlcnJvciBhIGxpYnVzYiBlcnJvciBjb2RlIGlzIHJldHVybmVk
 LCBmb3IgZXhhbXBsZQ0KLUxJQlVTQl9FUlJPUl9USU1FT1VUIGlmIHRoZSB0
 cmFuc2ZlciB0aW1lb3V0LCBMSUJVU0JfRVJST1JfUElQRSBpZiB0aGUNCitP
 biBlcnJvciBhIExJQlVTQl9FUlJPUiBjb2RlIGlzIHJldHVybmVkLCBmb3Ig
 ZXhhbXBsZQ0KK0xJQlVTQl9FUlJPUl9USU1FT1VUIGlmIHRoZSB0cmFuc2Zl
 ciB0aW1lZCBvdXQsIExJQlVTQl9FUlJPUl9QSVBFIGlmIHRoZQ0KIGNvbnRy
 b2wgcmVxdWVzdCB3YXMgbm90IHN1cHBvcnRlZCwgTElCVVNCX0VSUk9SX05P
 X0RFVklDRSBpZiB0aGUNCi1kZXZpY2UgaGFzIGJlZW4gZGlzY29ubmVjdGVk
 IG9yIGFub3RoZXIgTElCVVNCX0VSUk9SIGNvZGUgb24gb3RoZXIgZmFpbHVy
 ZXMuDQotVGhlIGxpYnVzYiBlcnJvciBjb2RlcyBhcmUgYWx3YXlzIG5lZ2F0
 aXZlLg0KK2RldmljZSBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgYW5kIGFub3Ro
 ZXIgTElCVVNCX0VSUk9SIGNvZGUgb24gb3RoZXIgZmFpbHVyZXMuDQorVGhl
 IExJQlVTQl9FUlJPUiBjb2RlcyBhcmUgYWxsIG5lZ2F0aXZlLg0KIC5QcA0K
 IC5GdCBpbnQNCiAuRm4gbGlidXNiX2J1bGtfdHJhbnNmZXIgInN0cnVjdCBs
 aWJ1c2JfZGV2aWNlX2hhbmRsZSAqZGV2aCIgInVuc2lnbmVkIGNoYXIgZW5k
 cG9pbnQiICJ1bnNpZ25lZCBjaGFyICpkYXRhIiAiaW50IGxlbmd0aCIgImlu
 dCAqdHJhbnNmZXJyZWQiICJ1bnNpZ25lZCBpbnQgdGltZW91dCINCkBAIC0z
 NDksMTAgKzM1NCwxMCBAQA0KIEEgdGltZW91dCB2YWx1ZSBvZiB6ZXJvIG1l
 YW5zIG5vIHRpbWVvdXQuDQogVGhlIHRpbWVvdXQgdmFsdWUgaXMgZ2l2ZW4g
 aW4gbWlsbGlzZWNvbmRzLg0KIFJldHVybnMgMCBvbiBzdWNjZXNzLCBMSUJV
 U0JfRVJST1JfVElNRU9VVA0KLWlmIHRoZSB0cmFuc2ZlciB0aW1lb3V0LCBM
 SUJVU0JfRVJST1JfUElQRSBpZiB0aGUgY29udHJvbCByZXF1ZXN0IHdhcyBu
 b3QNCitpZiB0aGUgdHJhbnNmZXIgdGltZWQgb3V0LCBMSUJVU0JfRVJST1Jf
 UElQRSBpZiB0aGUgY29udHJvbCByZXF1ZXN0IHdhcyBub3QNCiBzdXBwb3J0
 ZWQsIExJQlVTQl9FUlJPUl9PVkVSRkxPVyBpZiB0aGUgZGV2aWNlIG9mZmVy
 ZWQgbW9yZSBkYXRhLA0KIExJQlVTQl9FUlJPUl9OT19ERVZJQ0UgaWYgdGhl
 IGRldmljZSBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgYW5kDQotTElCVVNCX0VS
 Uk9SIGNvZGUgb24gb3RoZXIgZmFpbHVyZS4NCithIExJQlVTQl9FUlJPUiBj
 b2RlIG9uIG90aGVyIGZhaWx1cmUuDQogLlBwDQogLkZ0IGludA0KIC5GbiBs
 aWJ1c2JfaW50ZXJydXB0X3RyYW5zZmVyICJzdHJ1Y3QgbGlidXNiX2Rldmlj
 ZV9oYW5kbGUgKmRldmgiICJ1bnNpZ25lZCBjaGFyIGVuZHBvaW50IiAidW5z
 aWduZWQgY2hhciAqZGF0YSIgImludCBsZW5ndGgiICJpbnQgKnRyYW5zZmVy
 cmVkIiAidW5zaWduZWQgaW50IHRpbWVvdXQiDQpAQCAtMzYwLDEwICszNjUs
 MTAgQEANCiBBIHRpbWVvdXQgdmFsdWUgb2YgemVybyBtZWFucyBubyB0aW1l
 b3V0Lg0KIFRoZSB0aW1lb3V0IHZhbHVlIGlzIGdpdmVuIGluIG1pbGxpc2Vj
 b25kcy4NCiBSZXR1cm5zIDAgb24gc3VjY2VzcywgTElCVVNCX0VSUk9SX1RJ
 TUVPVVQNCi1pZiB0aGUgdHJhbnNmZXIgdGltZW91dCwgTElCVVNCX0VSUk9S
 X1BJUEUgaWYgdGhlIGNvbnRyb2wgcmVxdWVzdCB3YXMgbm90DQoraWYgdGhl
 IHRyYW5zZmVyIHRpbWVkIG91dCwgTElCVVNCX0VSUk9SX1BJUEUgaWYgdGhl
 IGNvbnRyb2wgcmVxdWVzdCB3YXMgbm90DQogc3VwcG9ydGVkLCBMSUJVU0Jf
 RVJST1JfT1ZFUkZMT1cgaWYgdGhlIGRldmljZSBvZmZlcmVkIG1vcmUgZGF0
 YSwNCiBMSUJVU0JfRVJST1JfTk9fREVWSUNFIGlmIHRoZSBkZXZpY2UgaGFz
 IGJlZW4gZGlzY29ubmVjdGVkIGFuZA0KLUxJQlVTQl9FUlJPUiBjb2RlIG9u
 IG90aGVyIGZhaWx1cmUuDQorYSBMSUJVU0JfRVJST1IgY29kZSBvbiBvdGhl
 ciBmYWlsdXJlLg0KIC5QcA0KIC5TaCBVU0IgRVZFTlRTDQogLlBwDQpAQCAt
 MzgxLDcgKzM4Niw4IEBADQogLkZuIGxpYnVzYl91bmxvY2tfZXZlbnRzICJs
 aWJ1c2JfY29udGV4dCAqY3R4Ig0KIFJlbGVhc2UgdGhlIGV2ZW50IGhhbmRs
 aW5nIGxvY2suDQogVGhpcyB3aWxsIHdha2UgdXAgYW55IHRocmVhZCBibG9j
 a2VkDQotb24gbGlidXNiX3dhaXRfZm9yX2V2ZW50KCkuDQorb24NCisuQiBs
 aWJ1c2Jfd2FpdF9mb3JfZXZlbnQoKSAuDQogLlBwDQogLkZ0IGludA0KIC5G
 biBsaWJ1c2JfZXZlbnRfaGFuZGxpbmdfb2sgImxpYnVzYl9jb250ZXh0ICpj
 dHgiDQpAQCAtMzk0LDEzICs0MDAsMTMgQEANCiAuRnQgaW50DQogLkZuIGxp
 YnVzYl9ldmVudF9oYW5kbGVyX2FjdGl2ZSAibGlidXNiX2NvbnRleHQgKmN0
 eCINCiBEZXRlcm1pbmUgaWYgYW4gYWN0aXZlIHRocmVhZCBpcyBoYW5kbGlu
 ZyBldmVudHMuDQotUmV0dXJucyAxIGlmIHllcyBhbmQgMCBpZiB0aGVyZQ0K
 K1JldHVybnMgMSBpZiB0aGVyZSBpcyBhIHRocmVhZCBoYW5kbGluZyBldmVu
 dHMgYW5kIDAgaWYgdGhlcmUNCiBhcmUgbm8gdGhyZWFkcyBjdXJyZW50bHkg
 aGFuZGxpbmcgZXZlbnRzLg0KIC5QcA0KIC5GdCB2b2lkDQogLkZuIGxpYnVz
 Yl9sb2NrX2V2ZW50X3dhaXRlcnMgImxpYnVzYl9jb250ZXh0ICpjdHgiDQog
 QWNxdWlyZSB0aGUgZXZlbnRfd2FpdGVycyBsb2NrLg0KLVRoaXMgbG9jayBp
 cyBkZXNpZ25lZCB0byBiZSBvYnRhaW5lZCB1bmRlciB0aGUNCitUaGlzIGxv
 Y2sgaXMgZGVzaWduZWQgdG8gYmUgb2J0YWluZWQgaW4gdGhlDQogc2l0dWF0
 aW9uIHdoZXJlIHlvdSB3YW50IHRvIGJlIGF3YXJlIHdoZW4gZXZlbnRzIGFy
 ZSBjb21wbGV0ZWQsIGJ1dCBzb21lIG90aGVyDQogdGhyZWFkIGlzIGV2ZW50
 IGhhbmRsaW5nIHNvIGNhbGxpbmcgbGlidXNiX2hhbmRsZV9ldmVudHMoKSBp
 cyBub3QgYWxsb3dlZC4NCiAuUHANCkBAIC00MTcsNyArNDIzLDcgQEANCiBi
 bG9jayB1bnRpbCB0aGUgdGltZW91dCBleHBpcmVzIG9yIGEgdHJhbnNmZXIg
 Y29tcGxldGVzIG9yIGEgdGhyZWFkIHJlbGVhc2VzDQogdGhlIGV2ZW50IGhh
 bmRsaW5nIGxvY2sgdGhyb3VnaCBsaWJ1c2JfdW5sb2NrX2V2ZW50cygpLg0K
 IFJldHVybnMgMCBhZnRlciBhDQotdHJhbnNmZXIgY29tcGxldGVzIG9yIGFu
 b3RoZXIgdGhyZWFkIHN0b3BzIGV2ZW50IGhhbmRsaW5nLCByZXR1cm5zIDEg
 aWYgdGhlDQordHJhbnNmZXIgY29tcGxldGVzIG9yIGFub3RoZXIgdGhyZWFk
 IHN0b3BzIGV2ZW50IGhhbmRsaW5nLCBhbmQgMSBpZiB0aGUNCiB0aW1lb3V0
 IGV4cGlyZWQuDQogLlBwDQogLkZ0IGludA0KQEAgLTQzMSwxOSArNDM3LDE5
 IEBADQogLkZuIGxpYnVzYl9oYW5kbGVfZXZlbnRzICJsaWJ1c2JfY29udGV4
 dCAqY3R4Ig0KIEhhbmRsZSBhbnkgcGVuZGluZyBldmVudHMgaW4gYmxvY2tp
 bmcgbW9kZSB3aXRoIGEgc2Vuc2libGUgdGltZW91dC4NCiBSZXR1cm5zIDAN
 Ci1vbiBzdWNjZXNzLCByZXR1cm5zIGEgTElCVVNCX0VSUk9SIGNvZGUgb24g
 ZmFpbHVyZS4NCitvbiBzdWNjZXNzIGFuZCBhIExJQlVTQl9FUlJPUiBjb2Rl
 IG9uIGZhaWx1cmUuDQogLlBwDQogLkZ0IGludA0KIC5GbiBsaWJ1c2JfaGFu
 ZGxlX2V2ZW50c19sb2NrZWQgImxpYnVzYl9jb250ZXh0ICpjdHgiICJzdHJ1
 Y3QgdGltZXZhbCAqdHYiDQogSGFuZGxlIGFueSBwZW5kaW5nIGV2ZW50cyBi
 eSBwb2xsaW5nIGZpbGUgZGVzY2lwdG9ycywgd2l0aG91dCBjaGVja2luZyBp
 Zg0KLWFub3RoZXIgdGhyZWFkcyBhcmUgYWxyZWFkeSBkb2luZyBzby4NCith
 bm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGRvaW5nIHNvLg0KIE11c3QgYmUg
 Y2FsbGVkIHdpdGggdGhlIGV2ZW50IGxvY2sgaGVsZC4NCiAuUHANCiAuRnQg
 aW50DQogLkZuIGxpYnVzYl9nZXRfbmV4dF90aW1lb3V0ICJsaWJ1c2JfY29u
 dGV4dCAqY3R4IiAic3RydWN0IHRpbWV2YWwgKnR2Ig0KIERldGVybWluZSB0
 aGUgbmV4dCBpbnRlcm5hbCB0aW1lb3V0IHRoYXQgbGlidXNiIG5lZWRzIHRv
 IGhhbmRsZS4NCiBSZXR1cm5zIDANCi1pZiB0aGVyZSBhcmUgbm8gcGVuZGlu
 ZyB0aW1lb3V0cywgMSBpZiBhIHRpbWVvdXQgd2FzIHJldHVybmVkLCBvciBM
 SUJVU0JfRVJST1INCitpZiB0aGVyZSBhcmUgbm8gcGVuZGluZyB0aW1lb3V0
 cywgMSBpZiBhIHRpbWVvdXQgd2FzIHJldHVybmVkLCBvciBhIExJQlVTQl9F
 UlJPUg0KIGNvZGUgb24gZmFpbHVyZS4NCiAuUHANCiAuRnQgdm9pZA0K
 
 ---559023410-2104005412-1313767328=:7526--

From: Hans Petter Selasky <hselasky@c2i.net>
To: Benjamin Kaduk <kaduk@mit.edu>
Cc: "bug-followup@freebsd.org" <bug-followup@freebsd.org>
Subject: Re: docs/159898: [patch] libusb.3 whitespace, markup, grammar fixes
Date: Sat, 20 Aug 2011 16:06:05 +0200

 On Friday 19 August 2011 17:22:08 Benjamin Kaduk wrote:
 > (was: Re: Fwd: svn commit: r224917 - head/lib/libusb)
 > 
 > On Fri, 19 Aug 2011, Hans Petter Selasky wrote:
 > > On Friday 19 August 2011 05:40:46 Benjamin Kaduk wrote:
 > >> Dear Hans Petter,
 > >> 
 > >> I saw a couple grammar and style issues as this went by, and ended up
 > >> going through the whole man page.  Could you take a look at docs/159898
 > >> and make sure I didn't change anything factually incorrectly?
 > >> 
 > >> Thanks,
 > >> 
 > >> Ben Kaduk
 > > 
 > > Looks good!
 > > 
 > > One more change I would suggest:
 > > 
 > > +A convenience function to open a device with vendor and producd IDs
 > > 
 > > Into:
 > > 
 > > +A convenience function to open a device by vendor and product IDs
 > > 
 > > --HPS
 > 
 > Updated patch with comments from hps -- thanks for catching it!
 > 
 > -Ben
 
 Looks good. Who will commit it?
 
 --HPS

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: docs/159898: commit references a PR
Date: Mon, 22 Aug 2011 21:05:55 +0000 (UTC)

 Author: hselasky
 Date: Mon Aug 22 21:05:39 2011
 New Revision: 225090
 URL: http://svn.freebsd.org/changeset/base/225090
 
 Log:
   Whitespace corrections for LibUSB manual page (1/2).
   
   MFC after:	1 week
   Approved by:	re (kib)
   PR:		docs/159898
 
 Modified:
   head/lib/libusb/libusb.3
 
 Modified: head/lib/libusb/libusb.3
 ==============================================================================
 --- head/lib/libusb/libusb.3	Mon Aug 22 20:44:18 2011	(r225089)
 +++ head/lib/libusb/libusb.3	Mon Aug 22 21:05:39 2011	(r225090)
 @@ -31,165 +31,123 @@
  .Os
  .Sh NAME
  .Nm libusb
 -.
  .Nd "USB access library"
 -.
 -.
  .Sh LIBRARY
 -.
 -.
  USB access library (libusb -lusb)
 -.
 -.
  .Sh SYNOPSIS
 -.
 -.
  .In libusb.h
 -.
 -.
  .Sh DESCRIPTION
  The
  .Nm
  library contains interfaces for directly managing a usb device.
  The current implementation supports v1.0 of the libusb API.
 -.
 -.
  .Sh LIBRARY INITIALISATION / DEINITIALISATION
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_init libusb_context **ctx
 -This function initialises libusb. Must be called at the beginning
 -of the program. This function returns 0 on success or LIBUSB_ERROR on 
 +This function initialises libusb.
 +Must be called at the beginning
 +of the program.
 +This function returns 0 on success or LIBUSB_ERROR on
  failure.
 -. 
  .Pp
 -.
  .Ft void
  .Fn libusb_exit "libusb_context *ctx"
 -Deinitialise libusb. Must be called at the end of the application.
 -.
 +Deinitialise libusb.
 +Must be called at the end of the application.
  .Pp
 -.
  .Ft const char *
  .Fn libusb_strerror "int code"
  Get ASCII representation of the error given by the
  .Fa code
  argument.
 -.
 -.
  .Pp
 -.
  .Ft void
  .Fn libusb_set_debug "libusb_context *ctx" "int level"
  Set debug to the
  .Fa level
  level.
 -.
  .Pp
 -.
  .Ft ssize_t
  .Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list"
  Fill into
 -.Fa list 
 -the list of usb device available. All the device created by this
 -function must be unref and free when you are done with them. This
 +.Fa list
 +the list of usb device available.
 +All the device created by this
 +function must be unref and free when you are done with them.
 +This
  function returns the number of devices in list or a LIBUSB_ERROR code.
 -.
  .Pp
 -.
  .Ft void
  .Fn libusb_free_device_list "libusb_device **list" "int unref_devices"
 -Free the list of devices discovered by libusb_get_device_list. If 
 +Free the list of devices discovered by libusb_get_device_list.
 +If
  .Fa unref_device
  is set to 1 all devices are unref one time.
 -.
  .Pp
 -.
  .Ft uint8_t
  .Fn libusb_get_bus_number "libusb_device *dev"
  Returns the number of the bus contained by the device
  .Fa dev.
 -.
  .Pp
 -.
  .Ft uint8_t
  .Fn libusb_get_device_address "libusb_device *dev"
  Returns the device_address contained by the device
  .Fa dev.
 -.
  .Pp
 -.
  .Ft enum libusb_speed
  .Fn libusb_get_device_speed "libusb_device *dev"
  Returns the wire speed at which the device is connected.
  See the LIBUSB_SPEED_XXX enums for more information.
  LIBUSB_SPEED_UNKNOWN is returned in case of unknown wire speed.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_get_max_packet_size "libusb_device *dev" "unsigned char endpoint"
 -Returns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the 
 +Returns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the
  endpoint does not exist and LIBUSB_ERROR_OTHERS on other failure.
 -.
  .Pp
 -.
  .Ft libusb_device *
  .Fn libusb_ref_device "libusb_device *dev"
  Increment the reference counter of the device
  .Fa dev.
 -.
  .Pp
 -.
  .Ft void
  .Fn libusb_unref_device "libusb_device *dev"
  Decrement the reference counter of the device
  .Fa dev.
 -.
  .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, 
 -LIBUSB_ERROR_NO_MEM on memory allocation problem, LIBUSB_ERROR_ACCESS 
 -on permission problem, LIBUSB_ERROR_NO_DEVICE if the device has been 
 +Open a device and obtain a device_handle.
 +Returns 0 on success,
 +LIBUSB_ERROR_NO_MEM on memory allocation problem, LIBUSB_ERROR_ACCESS
 +on permission problem, LIBUSB_ERROR_NO_DEVICE if the device has been
  disconnected and a LIBUSB_ERROR code on error.
 -.
  .Pp
 -.
  .Ft libusb_device_handle *
  .Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid"
 -Convenience function to open a device with is 
 -.Fa vid 
 -and 
 +Convenience function to open a device with is
 +.Fa vid
 +and
  .Fa pid.
  Returns NULL on error.
 -.
  .Pp
 -.
  .Ft void
  .Fn libusb_close "libusb_device_handle *devh"
  Close a device handle.
 -.
  .Pp
 -.
  .Ft libusb_device *
  .Fn libusb_get_device "libusb_device_handle *devh"
  Get the device contained by devh.
  Returns NULL on error.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_get_configuration "libusb_device_handle *devh" "int *config"
 -Returns the bConfiguration value of the current configuration. Returns 0
 -on success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected 
 +Returns the bConfiguration value of the current configuration.
 +Returns 0
 +on success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
  and a LIBUSB_ERROR code on error.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_set_configuration "libusb_device_handle *devh" "int config"
  Set the active configuration
 @@ -197,73 +155,66 @@ Set the active configuration
  for the device contained by
  .Fa devh.
  This function returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the requested
 -configuration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently 
 -claimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a 
 +configuration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently
 +claimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a
  LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_claim_interface "libusb_device_handle *devh" "int interface_number"
  Claim an interface in a given libusb_handle
  .Fa devh.
 -This is a non-blocking function. It returns 0 success, LIBUSB_ERROR_NOT_FOUND 
 -if the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or 
 -driver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has 
 +This is a non-blocking function.
 +It returns 0 success, LIBUSB_ERROR_NOT_FOUND
 +if the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or
 +driver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has
  been disconnected and a LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number"
 -This function release an interface. All the claimed interface must be released
 -before closing a device. Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the 
 -interface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been 
 +This function release an interface.
 +All the claimed interface must be released
 +before closing a device.
 +Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the
 +interface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been
  disconnected and LIBUSB_ERROR on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_set_interface_alt_setting "libusb_device_handle *dev" "int interface_number" "int alternate_setting"
 -Activate an alternate setting for an interface. Returns 0 on success, 
 -LIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested 
 -setting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 
 +Activate an alternate setting for an interface.
 +Returns 0 on success,
 +LIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested
 +setting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
  disconnected and LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint"
 -Clear an halt/stall for a endpoint. Returns 0 on success, LIBUSB_ERROR_NOT_FOUND
 -if the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 
 +Clear an halt/stall for a endpoint.
 +Returns 0 on success, LIBUSB_ERROR_NOT_FOUND
 +if the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
  disconnected and a LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_reset_device "libusb_device_handle *devh"
 -Perform an USB port reset for an usb device. Returns 0 on success,
 +Perform an USB port reset for an usb device.
 +Returns 0 on success,
  LIBUSB_ERROR_NOT_FOUND if re-enumeration is required or if the device has
  been disconnected and a LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_check_connected "libusb_device_handle *devh"
 -Test if USB device is still connected. Returns 0 on success,
 +Test if USB device is still connected.
 +Returns 0 on success,
  LIBUSB_ERROR_NO_DEVICE if has been disconnected and a LIBUSB_ERROR
  code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface"
 -Determine if a driver is active on a interface. Returns 0 if no kernel driver
 -is active, returns 1 if a kernel driver is active, returns LIBUSB_ERROR_NO_DEVICE
 +Determine if a driver is active on a interface.
 +Returns 0 if no kernel driver
 +is active, returns 1 if a kernel driver is active,
 +returns LIBUSB_ERROR_NO_DEVICE
  if the device has been disconnected and returns a LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_get_driver "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
  or
 @@ -284,9 +235,7 @@ 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"
  or
 @@ -295,69 +244,66 @@ or
  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.
 -.
 +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
 -.
  .Ft int
  .Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface"
 -Re-attach an interface kernel driver previously detached. Returns 0 on success, 
 -LIBUSB_ERROR_INVALID_PARAM if the interface does not exist, LIBUSB_ERROR_NO_DEVICE
 -if the device has been disconnect, LIBUSB_ERROR_BUSY if the driver cannot be 
 -attached because the interface is claimed by a program or driver and a 
 +Re-attach an interface kernel driver previously detached.
 +Returns 0 on success,
 +LIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
 +LIBUSB_ERROR_NO_DEVICE
 +if the device has been disconnect, LIBUSB_ERROR_BUSY if the driver cannot be
 +attached because the interface is claimed by a program or driver and a
  LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Sh USB DESCRIPTORS
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_get_device_descriptor "libusb_device *dev" "libusb_device_descriptor *desc"
  Get the USB device descriptor for the device
  .Fa dev.
 -This is a non-blocking function. Returns 0 on success and a LIBUSB_ERROR code on 
 +This is a non-blocking function.
 +Returns 0 on success and a LIBUSB_ERROR code on
  failure.
 -.
  .Pp
 -.Ft int 
 +.Ft int
  .Fn libsub_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config"
 -Get the USB configuration descriptor for the active configuration. Returns 0 on 
 -success, returns LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state 
 +Get the USB configuration descriptor for the active configuration.
 +Returns 0 on
 +success, returns LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state
  and returns another LIBUSB_ERROR code on error.
 -.
  .Pp
 -.Ft int 
 +.Ft int
  .Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config"
 -Get USB configuration descriptor based on its index 
 +Get USB configuration descriptor based on its index
  .Fa idx.
 -Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist 
 +Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist
  and returns another LIBUSB_ERROR code on error.
 -.
  .Pp
  .Ft int
  .Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config"
 -Get a USB configuration descriptor with a specific bConfigurationValue. This is 
 -a non-blocking function which does not send request through the device. Returns 0 
 -on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist and another 
 +Get a USB configuration descriptor with a specific bConfigurationValue.
 +This is
 +a non-blocking function which does not send request through the device.
 +Returns 0
 +on success, LIBUSB_ERROR_NOT_FOUND if the configuration
 +does not exist and another
  LIBUSB_ERROR code on failure.
 -.
  .Pp
  .Ft void
  .Fn libusb_free_config_descriptor "libusb_config_descriptor *config"
  Free a configuration descriptor.
 -.
  .Pp
  .Ft int
  .Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length"
  Retrieve a string descriptor in C style ascii.
 -Returns a positive number of bytes in the resulting ASCII string on success and a LIBUSB_ERROR code on failure.
 -.
 +Returns a positive number of bytes in the resulting ASCII string
 +on success and a LIBUSB_ERROR code on failure.
  .Pp
 -.
  .Sh USB ASYNCHRONOUS I/O
 -.
  .Pp
  .Ft struct libusb_transfer *
  .Fn libusb_alloc_transfer "int iso_packets"
 @@ -365,28 +311,24 @@ Allocate a transfer with
  .Fa iso_packets
  numbers of isochronous packet descriptors.
  Returns NULL on error.
 -.
  .Pp
  .Ft void
  .Fn libusb_free_transfer "struct libusb_transfer *tr"
  Free a transfer.
 -.
  .Pp
  .Ft int
  .Fn libusb_submit_transfer "struct libusb_transfer *tr"
  This function will submit a transfer and returns immediately.
 -Returns 0 on success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 
 +Returns 0 on success, LIBUSB_ERROR_NO_DEVICE if
 +the device has been disconnected and
  LIBUSB_ERROR code on other failure.
 -.
  .Pp
  .Ft int
  .Fn libusb_cancel_transfer "struct libusb_transfer *tr"
  This function asynchronously cancel a transfer.
  Returns 0 on success and LIBUSB_ERROR code on failure.
 -.
  .Pp
  .Sh USB SYNCHRONOUS I/O
 -.
  .Pp
  .Ft int
  .Fn libusb_control_transfer "libusb_device_handle *devh" "uint8_t bmRequestType" "uint8_t bRequest" "uint16_t wValue" "uint16_t wIndex" "unsigned char *data" "uint16_t wLength" "unsigned int timeout"
 @@ -400,125 +342,121 @@ LIBUSB_ERROR_TIMEOUT if the transfer tim
  control request was not supported, LIBUSB_ERROR_NO_DEVICE if the
  device has been disconnected or another LIBUSB_ERROR code on other failures.
  The libusb error codes are always negative.
 -.
  .Pp
  .Ft int
  .Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
  Perform an USB bulk transfer.
  A timeout value of zero means no timeout.
  The timeout value is given in milliseconds.
 -Returns 0 on success, LIBUSB_ERROR_TIMEOUT 
 -if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not 
 -supported, LIBUSB_ERROR_OVERFLOW if the device offered more data, 
 -LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 
 +Returns 0 on success, LIBUSB_ERROR_TIMEOUT
 +if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not
 +supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
 +LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
  LIBUSB_ERROR code on other failure.
 -.
  .Pp
  .Ft int
  .Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
  Perform an USB Interrupt transfer.
  A timeout value of zero means no timeout.
  The timeout value is given in milliseconds.
 -Returns 0 on success, LIBUSB_ERROR_TIMEOUT 
 -if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not 
 -supported, LIBUSB_ERROR_OVERFLOW if the device offered more data, 
 -LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 
 +Returns 0 on success, LIBUSB_ERROR_TIMEOUT
 +if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not
 +supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
 +LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
  LIBUSB_ERROR code on other failure.
 -.
  .Pp
  .Sh USB EVENTS
 -.
  .Pp
  .Ft int
  .Fn libusb_try_lock_events "libusb_context *ctx"
  Try to acquire the event handling lock.
  Returns 0 if the lock was obtained and 1 if not.
 -.
  .Pp
  .Ft void
  .Fn libusb_lock_events "libusb_context *ctx"
 -Acquire the event handling lock. This function is blocking.
 -.
 +Acquire the event handling lock.
 +This function is blocking.
  .Pp
  .Ft void
  .Fn libusb_unlock_events "libusb_context *ctx"
 -Release the event handling lock. This will wake up any thread blocked
 +Release the event handling lock.
 +This will wake up any thread blocked
  on libusb_wait_for_event().
 -.
  .Pp
  .Ft int
  .Fn libusb_event_handling_ok "libusb_context *ctx"
 -Determine if it still OK for this thread to be doing event handling. Returns 1
 -if event handling can start or continue. Returns 0 if this thread must give up
 +Determine if it still OK for this thread to be doing event handling.
 +Returns 1
 +if event handling can start or continue.
 +Returns 0 if this thread must give up
  the events lock.
 -.
  .Pp
  .Ft int
  .Fn libusb_event_handler_active "libusb_context *ctx"
 -Determine if an active thread is handling events. Returns 1 if yes and 0 if there
 +Determine if an active thread is handling events.
 +Returns 1 if yes and 0 if there
  are no threads currently handling events.
 -.
  .Pp
  .Ft void
  .Fn libusb_lock_event_waiters "libusb_context *ctx"
 -Acquire the event_waiters lock. This lock is designed to be obtained under the
 +Acquire the event_waiters lock.
 +This lock is designed to be obtained under the
  situation where you want to be aware when events are completed, but some other
  thread is event handling so calling libusb_handle_events() is not allowed.
 -.
  .Pp
  .Ft void
  .Fn libusb_unlock_event_waiters "libusb_context *ctx"
  Release the event_waiters lock.
 -.
  .Pp
 -.Ft int 
 +.Ft int
  .Fn libusb_wait_for_event "libusb_context *ctx" "struct timeval *tv"
 -Wait for another thread to signal completion of an event. Must be called
 -with the event waiters lock held, see libusb_lock_event_waiters(). This will
 +Wait for another thread to signal completion of an event.
 +Must be called
 +with the event waiters lock held, see libusb_lock_event_waiters().
 +This will
  block until the timeout expires or a transfer completes or a thread releases
 -the event handling lock through libusb_unlock_events(). Returns 0 after a 
 +the event handling lock through libusb_unlock_events().
 +Returns 0 after a
  transfer completes or another thread stops event handling, returns 1 if the
  timeout expired.
 -.
  .Pp
  .Ft int
  .Fn libusb_handle_events_timeout "libusb_context *ctx" "struct timeval *tv"
 -Handle any pending events by checking if timeouts have expired and by 
 -checking the set of file descriptors for activity. Returns 0 on success, or a
 +Handle any pending events by checking if timeouts have expired and by
 +checking the set of file descriptors for activity.
 +Returns 0 on success, or a
  LIBUSB_ERROR code on failure.
 -.
  .Pp
  .Ft int
  .Fn libusb_handle_events "libusb_context *ctx"
 -Handle any pending events in blocking mode with a sensible timeout. Returns 0
 +Handle any pending events in blocking mode with a sensible timeout.
 +Returns 0
  on success, returns a LIBUSB_ERROR code on failure.
 -.
  .Pp
  .Ft int
  .Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv"
  Handle any pending events by polling file desciptors, without checking if
 -another threads are already doing so. Must be called with the event lock held.
 -.
 +another threads are already doing so.
 +Must be called with the event lock held.
  .Pp
  .Ft int
  .Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv"
 -Determine the next internal timeout that libusb needs to handle. Returns 0
 +Determine the next internal timeout that libusb needs to handle.
 +Returns 0
  if there are no pending timeouts, 1 if a timeout was returned, or LIBUSB_ERROR
  code on failure.
 -.
  .Pp
  .Ft void
  .Fn libusb_set_pollfd_notifiers "libusb_context *ctx" "libusb_pollfd_added_cb added_cb" "libusb_pollfd_removed_cb remove_cb" "void *user_data"
  Register notification functions for file descriptor additions/removals.
  These functions will be invoked for every new or removed file descriptor
  that libusb uses as an event source.
 -.
  .Pp
  .Ft const struct libusb_pollfd **
  .Fn libusb_get_pollfds "libusb_context *ctx"
 -Retrive a list of file descriptors that should be polled by your main loop as 
 -libusb event sources. Returns a NULL-terminated list on success or NULL on failure.
 -.
 +Retrive a list of file descriptors that should be polled by your main loop as
 +libusb event sources.
 +Returns a NULL-terminated list on success or NULL on failure.
  .Sh LIBUSB VERSION 0.1 COMPATIBILITY
  .Pp
  The library is also compliant with LibUSB version 0.1.12.
 @@ -555,16 +493,13 @@ The library is also compliant with LibUS
  .Fn usb_check_connected
  .Fn usb_get_driver_np
  .Fn usb_detach_kernel_driver_np
 -.
  .Sh SEE ALSO
  .Xr libusb20 3 ,
  .Xr usb 4 ,
  .Xr usbconfig 8
  .Pp
  .Pa http://libusb.sourceforge.net/
 -.
  .Sh HISTORY
 -.
  .Nm
  support first appeared in
  .Fx 8.0 .
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: docs/159898: commit references a PR
Date: Mon, 22 Aug 2011 21:11:05 +0000 (UTC)

 Author: hselasky
 Date: Mon Aug 22 21:10:50 2011
 New Revision: 225091
 URL: http://svn.freebsd.org/changeset/base/225091
 
 Log:
   Spelling corrections for LibUSB manual page (2/2).
   
   MFC after:	1 week
   Approved by:	re (kib)
   PR:		docs/159898
 
 Modified:
   head/lib/libusb/libusb.3
 
 Modified: head/lib/libusb/libusb.3
 ==============================================================================
 --- head/lib/libusb/libusb.3	Mon Aug 22 21:05:39 2011	(r225090)
 +++ head/lib/libusb/libusb.3	Mon Aug 22 21:10:50 2011	(r225091)
 @@ -33,7 +33,8 @@
  .Nm libusb
  .Nd "USB access library"
  .Sh LIBRARY
 -USB access library (libusb -lusb)
 +USB access library
 +.Pq libusb, -lusb
  .Sh SYNOPSIS
  .In libusb.h
  .Sh DESCRIPTION
 @@ -46,8 +47,8 @@ The current implementation supports v1.0
  .Ft int
  .Fn libusb_init libusb_context **ctx
  This function initialises libusb.
 -Must be called at the beginning
 -of the program.
 +It must be called at the beginning
 +of the program, before other libusb routines are used.
  This function returns 0 on success or LIBUSB_ERROR on
  failure.
  .Pp
 @@ -55,35 +56,39 @@ failure.
  .Fn libusb_exit "libusb_context *ctx"
  Deinitialise libusb.
  Must be called at the end of the application.
 +Other libusb routines may not be called after this function.
  .Pp
  .Ft const char *
  .Fn libusb_strerror "int code"
 -Get ASCII representation of the error given by the
 +Get the ASCII representation of the error given by the
  .Fa code
  argument.
  .Pp
  .Ft void
  .Fn libusb_set_debug "libusb_context *ctx" "int level"
 -Set debug to the
 -.Fa level
 -level.
 +Set the debug level to
 +.Fa level .
  .Pp
  .Ft ssize_t
  .Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list"
 -Fill into
 +Populate
  .Fa list
 -the list of usb device available.
 -All the device created by this
 -function must be unref and free when you are done with them.
 +with the list of usb devices available, adding a reference to each
 +device in the list.
 +All the list entries created by this
 +function must have their reference counter
 +decremented when you are done with them,
 +and the list itself must be freed.
  This
 -function returns the number of devices in list or a LIBUSB_ERROR code.
 +function returns the number of devices in the list or a LIBUSB_ERROR code.
  .Pp
  .Ft void
  .Fn libusb_free_device_list "libusb_device **list" "int unref_devices"
  Free the list of devices discovered by libusb_get_device_list.
  If
  .Fa unref_device
 -is set to 1 all devices are unref one time.
 +is set to 1 all devices in the list have their reference
 +counter decremented once.
  .Pp
  .Ft uint8_t
  .Fn libusb_get_bus_number "libusb_device *dev"
 @@ -120,13 +125,13 @@ Decrement the reference counter of the d
  .Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh"
  Open a device and obtain a device_handle.
  Returns 0 on success,
 -LIBUSB_ERROR_NO_MEM on memory allocation problem, LIBUSB_ERROR_ACCESS
 -on permission problem, LIBUSB_ERROR_NO_DEVICE if the device has been
 -disconnected and a LIBUSB_ERROR code on error.
 +LIBUSB_ERROR_NO_MEM on memory allocation problems, LIBUSB_ERROR_ACCESS
 +on permissions problems, LIBUSB_ERROR_NO_DEVICE if the device has been
 +disconnected and a LIBUSB_ERROR code on other errors.
  .Pp
  .Ft libusb_device_handle *
  .Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid"
 -Convenience function to open a device with is
 +A convenience function to open a device by vendor and product IDs
  .Fa vid
  and
  .Fa pid.
 @@ -150,7 +155,7 @@ and a LIBUSB_ERROR code on error.
  .Pp
  .Ft int
  .Fn libusb_set_configuration "libusb_device_handle *devh" "int config"
 -Set the active configuration
 +Set the active configuration to
  .Fa config
  for the device contained by
  .Fa devh.
 @@ -164,16 +169,16 @@ LIBUSB_ERROR code on failure.
  Claim an interface in a given libusb_handle
  .Fa devh.
  This is a non-blocking function.
 -It returns 0 success, LIBUSB_ERROR_NOT_FOUND
 +It returns 0 on success, LIBUSB_ERROR_NOT_FOUND
  if the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or
  driver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has
  been disconnected and a LIBUSB_ERROR code on failure.
  .Pp
  .Ft int
  .Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number"
 -This function release an interface.
 -All the claimed interface must be released
 -before closing a device.
 +This function releases an interface.
 +All the claimed interfaces on a device must be released
 +before closing the device.
  Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the
  interface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been
  disconnected and LIBUSB_ERROR on failure.
 @@ -184,7 +189,7 @@ Activate an alternate setting for an int
  Returns 0 on success,
  LIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested
  setting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
 -disconnected and LIBUSB_ERROR code on failure.
 +disconnected and a LIBUSB_ERROR code on failure.
  .Pp
  .Ft int
  .Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint"
 @@ -202,31 +207,30 @@ been disconnected and a LIBUSB_ERROR cod
  .Pp
  .Ft int
  .Fn libusb_check_connected "libusb_device_handle *devh"
 -Test if USB device is still connected.
 +Test if the USB device is still connected.
  Returns 0 on success,
 -LIBUSB_ERROR_NO_DEVICE if has been disconnected and a LIBUSB_ERROR
 +LIBUSB_ERROR_NO_DEVICE if it has been disconnected and a LIBUSB_ERROR
  code on failure.
  .Pp
  .Ft int
  .Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface"
  Determine if a driver is active on a interface.
  Returns 0 if no kernel driver
 -is active, returns 1 if a kernel driver is active,
 -returns LIBUSB_ERROR_NO_DEVICE
 -if the device has been disconnected and returns a LIBUSB_ERROR code on failure.
 +is active, 1 if a kernel driver is active, LIBUSB_ERROR_NO_DEVICE
 +if the device has been disconnected and a LIBUSB_ERROR code on failure.
  .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
 +Copy the name of the driver attached to the given
  .Fa device
  and
  .Fa interface
 -into the buffer given by
 +into the buffer
  .Fa name
 -and
 +of length
  .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
 @@ -242,7 +246,7 @@ 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.
 +This is needed to claim an interface already claimed 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
 @@ -251,11 +255,11 @@ This function is non-portable.
  .Pp
  .Ft int
  .Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface"
 -Re-attach an interface kernel driver previously detached.
 +Re-attach an interface kernel driver that was previously detached.
  Returns 0 on success,
  LIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
  LIBUSB_ERROR_NO_DEVICE
 -if the device has been disconnect, LIBUSB_ERROR_BUSY if the driver cannot be
 +if the device has been disconnected, LIBUSB_ERROR_BUSY if the driver cannot be
  attached because the interface is claimed by a program or driver and a
  LIBUSB_ERROR code on failure.
  .Pp
 @@ -273,24 +277,25 @@ failure.
  .Fn libsub_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config"
  Get the USB configuration descriptor for the active configuration.
  Returns 0 on
 -success, returns LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state
 -and returns another LIBUSB_ERROR code on error.
 +success, LIBUSB_ERROR_NOT_FOUND if the device is in
 +an unconfigured state
 +and a LIBUSB_ERROR code on error.
  .Pp
  .Ft int
  .Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config"
 -Get USB configuration descriptor based on its index
 +Get a USB configuration descriptor based on its index
  .Fa idx.
  Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist
 -and returns another LIBUSB_ERROR code on error.
 +and a LIBUSB_ERROR code on error.
  .Pp
  .Ft int
  .Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config"
  Get a USB configuration descriptor with a specific bConfigurationValue.
  This is
 -a non-blocking function which does not send request through the device.
 +a non-blocking function which does not send a request through the device.
  Returns 0
  on success, LIBUSB_ERROR_NOT_FOUND if the configuration
 -does not exist and another
 +does not exist and a
  LIBUSB_ERROR code on failure.
  .Pp
  .Ft void
 @@ -299,17 +304,17 @@ Free a configuration descriptor.
  .Pp
  .Ft int
  .Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length"
 -Retrieve a string descriptor in C style ascii.
 -Returns a positive number of bytes in the resulting ASCII string
 +Retrieve a string descriptor in C style ASCII.
 +Returns the positive number of bytes in the resulting ASCII string
  on success and a LIBUSB_ERROR code on failure.
  .Pp
  .Sh USB ASYNCHRONOUS I/O
  .Pp
  .Ft struct libusb_transfer *
  .Fn libusb_alloc_transfer "int iso_packets"
 -Allocate a transfer with
 -.Fa iso_packets
 -numbers of isochronous packet descriptors.
 +Allocate a transfer with the number of isochronous packet descriptors
 +specified by
 +.Fa iso_packets .
  Returns NULL on error.
  .Pp
  .Ft void
 @@ -320,13 +325,13 @@ Free a transfer.
  .Fn libusb_submit_transfer "struct libusb_transfer *tr"
  This function will submit a transfer and returns immediately.
  Returns 0 on success, LIBUSB_ERROR_NO_DEVICE if
 -the device has been disconnected and
 +the device has been disconnected and a
  LIBUSB_ERROR code on other failure.
  .Pp
  .Ft int
  .Fn libusb_cancel_transfer "struct libusb_transfer *tr"
 -This function asynchronously cancel a transfer.
 -Returns 0 on success and LIBUSB_ERROR code on failure.
 +This function asynchronously cancels a transfer.
 +Returns 0 on success and a LIBUSB_ERROR code on failure.
  .Pp
  .Sh USB SYNCHRONOUS I/O
  .Pp
 @@ -334,14 +339,14 @@ Returns 0 on success and LIBUSB_ERROR co
  .Fn libusb_control_transfer "libusb_device_handle *devh" "uint8_t bmRequestType" "uint8_t bRequest" "uint16_t wValue" "uint16_t wIndex" "unsigned char *data" "uint16_t wLength" "unsigned int timeout"
  Perform a USB control transfer.
  Returns the actual number of bytes
 -transferred on success in the range from and including zero until and
 +transferred on success, in the range from and including zero up to and
  including
  .Fa wLength .
 -On error a libusb error code is returned, for example
 -LIBUSB_ERROR_TIMEOUT if the transfer timeout, LIBUSB_ERROR_PIPE if the
 +On error a LIBUSB_ERROR code is returned, for example
 +LIBUSB_ERROR_TIMEOUT if the transfer timed out, LIBUSB_ERROR_PIPE if the
  control request was not supported, LIBUSB_ERROR_NO_DEVICE if the
 -device has been disconnected or another LIBUSB_ERROR code on other failures.
 -The libusb error codes are always negative.
 +device has been disconnected and another LIBUSB_ERROR code on other failures.
 +The LIBUSB_ERROR codes are all negative.
  .Pp
  .Ft int
  .Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
 @@ -349,10 +354,10 @@ Perform an USB bulk transfer.
  A timeout value of zero means no timeout.
  The timeout value is given in milliseconds.
  Returns 0 on success, LIBUSB_ERROR_TIMEOUT
 -if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not
 +if the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
  supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
  LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
 -LIBUSB_ERROR code on other failure.
 +a LIBUSB_ERROR code on other failure.
  .Pp
  .Ft int
  .Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
 @@ -360,10 +365,10 @@ Perform an USB Interrupt transfer.
  A timeout value of zero means no timeout.
  The timeout value is given in milliseconds.
  Returns 0 on success, LIBUSB_ERROR_TIMEOUT
 -if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not
 +if the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
  supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
  LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
 -LIBUSB_ERROR code on other failure.
 +a LIBUSB_ERROR code on other failure.
  .Pp
  .Sh USB EVENTS
  .Pp
 @@ -381,7 +386,8 @@ This function is blocking.
  .Fn libusb_unlock_events "libusb_context *ctx"
  Release the event handling lock.
  This will wake up any thread blocked
 -on libusb_wait_for_event().
 +on
 +.B libusb_wait_for_event() .
  .Pp
  .Ft int
  .Fn libusb_event_handling_ok "libusb_context *ctx"
 @@ -394,13 +400,13 @@ the events lock.
  .Ft int
  .Fn libusb_event_handler_active "libusb_context *ctx"
  Determine if an active thread is handling events.
 -Returns 1 if yes and 0 if there
 +Returns 1 if there is a thread handling events and 0 if there
  are no threads currently handling events.
  .Pp
  .Ft void
  .Fn libusb_lock_event_waiters "libusb_context *ctx"
  Acquire the event_waiters lock.
 -This lock is designed to be obtained under the
 +This lock is designed to be obtained in the
  situation where you want to be aware when events are completed, but some other
  thread is event handling so calling libusb_handle_events() is not allowed.
  .Pp
 @@ -417,7 +423,7 @@ This will
  block until the timeout expires or a transfer completes or a thread releases
  the event handling lock through libusb_unlock_events().
  Returns 0 after a
 -transfer completes or another thread stops event handling, returns 1 if the
 +transfer completes or another thread stops event handling, and 1 if the
  timeout expired.
  .Pp
  .Ft int
 @@ -431,19 +437,19 @@ LIBUSB_ERROR code on failure.
  .Fn libusb_handle_events "libusb_context *ctx"
  Handle any pending events in blocking mode with a sensible timeout.
  Returns 0
 -on success, returns a LIBUSB_ERROR code on failure.
 +on success and a LIBUSB_ERROR code on failure.
  .Pp
  .Ft int
  .Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv"
  Handle any pending events by polling file desciptors, without checking if
 -another threads are already doing so.
 +another thread is already doing so.
  Must be called with the event lock held.
  .Pp
  .Ft int
  .Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv"
  Determine the next internal timeout that libusb needs to handle.
  Returns 0
 -if there are no pending timeouts, 1 if a timeout was returned, or LIBUSB_ERROR
 +if there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR
  code on failure.
  .Pp
  .Ft void
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: docs/159898: commit references a PR
Date: Tue, 23 Aug 2011 07:35:33 +0000 (UTC)

 Author: hselasky
 Date: Tue Aug 23 07:35:21 2011
 New Revision: 225102
 URL: http://svn.freebsd.org/changeset/base/225102
 
 Log:
   MFC r224903, r224917, r225035, r225090, r225091:
   - Add missing API function to the LibUSB v1.0 API.
   - Update LibUSB v1.0 manual page.
   
   PR:	docs/159898
 
 Modified:
   stable/8/lib/libusb/Makefile
   stable/8/lib/libusb/libusb.3
   stable/8/lib/libusb/libusb.h
   stable/8/lib/libusb/libusb10.c
 Directory Properties:
   stable/8/lib/libusb/   (props changed)
   stable/8/lib/libusb/usb.h   (props changed)
 
 Modified: stable/8/lib/libusb/Makefile
 ==============================================================================
 --- stable/8/lib/libusb/Makefile	Tue Aug 23 07:17:37 2011	(r225101)
 +++ stable/8/lib/libusb/Makefile	Tue Aug 23 07:35:21 2011	(r225102)
 @@ -43,6 +43,7 @@ MLINKS += libusb.3 libusb_get_device_lis
  MLINKS += libusb.3 libusb_free_device_list.3
  MLINKS += libusb.3 libusb_get_bus_number.3
  MLINKS += libusb.3 libusb_get_device_address.3
 +MLINKS += libusb.3 libusb_get_device_speed.3
  MLINKS += libusb.3 libusb_get_max_packet_size.3
  MLINKS += libusb.3 libusb_ref_device.3
  MLINKS += libusb.3 libusb_unref_device.3
 
 Modified: stable/8/lib/libusb/libusb.3
 ==============================================================================
 --- stable/8/lib/libusb/libusb.3	Tue Aug 23 07:17:37 2011	(r225101)
 +++ stable/8/lib/libusb/libusb.3	Tue Aug 23 07:35:21 2011	(r225102)
 @@ -26,247 +26,211 @@
  .\"
  .\" $FreeBSD$
  .\"
 -.Dd November 18, 2010
 +.Dd August 16, 2011
  .Dt LIBUSB 3
  .Os
  .Sh NAME
  .Nm libusb
 -.
  .Nd "USB access library"
 -.
 -.
  .Sh LIBRARY
 -.
 -.
 -USB access library (libusb -lusb)
 -.
 -.
 +USB access library
 +.Pq libusb, -lusb
  .Sh SYNOPSIS
 -.
 -.
  .In libusb.h
 -.
 -.
  .Sh DESCRIPTION
  The
  .Nm
  library contains interfaces for directly managing a usb device.
  The current implementation supports v1.0 of the libusb API.
 -.
 -.
  .Sh LIBRARY INITIALISATION / DEINITIALISATION
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_init libusb_context **ctx
 -This function initialises libusb. Must be called at the beginning
 -of the program. This function returns 0 on success or LIBUSB_ERROR on 
 +This function initialises libusb.
 +It must be called at the beginning
 +of the program, before other libusb routines are used.
 +This function returns 0 on success or LIBUSB_ERROR on
  failure.
 -. 
  .Pp
 -.
  .Ft void
  .Fn libusb_exit "libusb_context *ctx"
 -Deinitialise libusb. Must be called at the end of the application.
 -.
 +Deinitialise libusb.
 +Must be called at the end of the application.
 +Other libusb routines may not be called after this function.
  .Pp
 -.
  .Ft const char *
  .Fn libusb_strerror "int code"
 -Get ASCII representation of the error given by the
 +Get the ASCII representation of the error given by the
  .Fa code
  argument.
 -.
 -.
  .Pp
 -.
  .Ft void
  .Fn libusb_set_debug "libusb_context *ctx" "int level"
 -Set debug to the
 -.Fa level
 -level.
 -.
 +Set the debug level to
 +.Fa level .
  .Pp
 -.
  .Ft ssize_t
  .Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list"
 -Fill into
 -.Fa list 
 -the list of usb device available. All the device created by this
 -function must be unref and free when you are done with them. This
 -function returns the number of devices in list or a LIBUSB_ERROR code.
 -.
 +Populate
 +.Fa list
 +with the list of usb devices available, adding a reference to each
 +device in the list.
 +All the list entries created by this
 +function must have their reference counter
 +decremented when you are done with them,
 +and the list itself must be freed.
 +This
 +function returns the number of devices in the list or a LIBUSB_ERROR code.
  .Pp
 -.
  .Ft void
  .Fn libusb_free_device_list "libusb_device **list" "int unref_devices"
 -Free the list of devices discovered by libusb_get_device_list. If 
 +Free the list of devices discovered by libusb_get_device_list.
 +If
  .Fa unref_device
 -is set to 1 all devices are unref one time.
 -.
 +is set to 1 all devices in the list have their reference
 +counter decremented once.
  .Pp
 -.
  .Ft uint8_t
  .Fn libusb_get_bus_number "libusb_device *dev"
  Returns the number of the bus contained by the device
  .Fa dev.
 -.
  .Pp
 -.
  .Ft uint8_t
  .Fn libusb_get_device_address "libusb_device *dev"
 -Return the device_address contained by the device
 +Returns the device_address contained by the device
  .Fa dev.
 -.
  .Pp
 -.
 +.Ft enum libusb_speed
 +.Fn libusb_get_device_speed "libusb_device *dev"
 +Returns the wire speed at which the device is connected.
 +See the LIBUSB_SPEED_XXX enums for more information.
 +LIBUSB_SPEED_UNKNOWN is returned in case of unknown wire speed.
 +.Pp
  .Ft int
  .Fn libusb_get_max_packet_size "libusb_device *dev" "unsigned char endpoint"
 -Return the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the 
 +Returns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the
  endpoint does not exist and LIBUSB_ERROR_OTHERS on other failure.
 -.
  .Pp
 -.
  .Ft libusb_device *
  .Fn libusb_ref_device "libusb_device *dev"
  Increment the reference counter of the device
  .Fa dev.
 -.
  .Pp
 -.
  .Ft void
  .Fn libusb_unref_device "libusb_device *dev"
  Decrement the reference counter of the device
  .Fa dev.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh"
 -Open a device and obtain a device_handle. Return 0 on success, 
 -LIBUSB_ERROR_NO_MEM on memory allocation problem, LIBUSB_ERROR_ACCESS 
 -on permission problem, LIBUSB_ERROR_NO_DEVICE if the device has been 
 -disconnected and a LIBUSB_ERROR code on error.
 -.
 +Open a device and obtain a device_handle.
 +Returns 0 on success,
 +LIBUSB_ERROR_NO_MEM on memory allocation problems, LIBUSB_ERROR_ACCESS
 +on permissions problems, LIBUSB_ERROR_NO_DEVICE if the device has been
 +disconnected and a LIBUSB_ERROR code on other errors.
  .Pp
 -.
  .Ft libusb_device_handle *
  .Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid"
 -Convenience function to open a device with is 
 -.Fa vid 
 -and 
 +A convenience function to open a device by vendor and product IDs
 +.Fa vid
 +and
  .Fa pid.
 -Return NULL on error.
 -.
 +Returns NULL on error.
  .Pp
 -.
  .Ft void
  .Fn libusb_close "libusb_device_handle *devh"
  Close a device handle.
 -.
  .Pp
 -.
  .Ft libusb_device *
 -.Fn libusb_get_device(libusb_device_handle *devh)
 -Get the device contained by devh. Return NULL on error.
 -.
 +.Fn libusb_get_device "libusb_device_handle *devh"
 +Get the device contained by devh.
 +Returns NULL on error.
  .Pp
 -.
  .Ft int
  .Fn libusb_get_configuration "libusb_device_handle *devh" "int *config"
 -Return the bConfiguration value of the current configuration. return 0
 -on success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected 
 +Returns the bConfiguration value of the current configuration.
 +Returns 0
 +on success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
  and a LIBUSB_ERROR code on error.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_set_configuration "libusb_device_handle *devh" "int config"
 -Set the active configuration
 +Set the active configuration to
  .Fa config
  for the device contained by
  .Fa devh.
 -This function return 0 on success, LIBUSB_ERROR_NOT_FOUND if the requested
 -configuration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently 
 -claimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a 
 +This function returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the requested
 +configuration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently
 +claimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a
  LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_claim_interface "libusb_device_handle *devh" "int interface_number"
  Claim an interface in a given libusb_handle
  .Fa devh.
 -This is a non-blocking function. It return 0 success, LIBUSB_ERROR_NOT_FOUND 
 -if the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or 
 -driver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has 
 +This is a non-blocking function.
 +It returns 0 on success, LIBUSB_ERROR_NOT_FOUND
 +if the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or
 +driver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has
  been disconnected and a LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number"
 -This function release an interface. All the claimed interface must be released
 -before closing a device. Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the 
 -interface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been 
 +This function releases an interface.
 +All the claimed interfaces on a device must be released
 +before closing the device.
 +Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the
 +interface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been
  disconnected and LIBUSB_ERROR on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_set_interface_alt_setting "libusb_device_handle *dev" "int interface_number" "int alternate_setting"
 -Activate an alternate setting for an interface. Returns 0 on success, 
 -LIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested 
 -setting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 
 -disconnected and LIBUSB_ERROR code on failure.
 -.
 +Activate an alternate setting for an interface.
 +Returns 0 on success,
 +LIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested
 +setting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
 +disconnected and a LIBUSB_ERROR code on failure.
  .Pp
 -.
  .Ft int
  .Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint"
 -Clear an halt/stall for a endpoint. Returns 0 on success, LIBUSB_ERROR_NOT_FOUND
 -if the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 
 +Clear an halt/stall for a endpoint.
 +Returns 0 on success, LIBUSB_ERROR_NOT_FOUND
 +if the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
  disconnected and a LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_reset_device "libusb_device_handle *devh"
 -Perform an USB port reset for an usb device. Returns 0 on success,
 +Perform an USB port reset for an usb device.
 +Returns 0 on success,
  LIBUSB_ERROR_NOT_FOUND if re-enumeration is required or if the device has
  been disconnected and a LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_check_connected "libusb_device_handle *devh"
 -Test if USB device is still connected. Returns 0 on success,
 -LIBUSB_ERROR_NO_DEVICE if has been disconnected and a LIBUSB_ERROR
 +Test if the USB device is still connected.
 +Returns 0 on success,
 +LIBUSB_ERROR_NO_DEVICE if it has been disconnected and a LIBUSB_ERROR
  code on failure.
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface"
 -Determine if a driver is active on a interface. Returns 0 if no kernel driver
 -is active, returns 1 if a kernel driver is active, returns LIBUSB_ERROR_NO_DEVICE
 -if the device has been disconnected and return a LIBUSB_ERROR code on failure.
 -.
 +Determine if a driver is active on a interface.
 +Returns 0 if no kernel driver
 +is active, 1 if a kernel driver is active, LIBUSB_ERROR_NO_DEVICE
 +if the device has been disconnected and a LIBUSB_ERROR code on failure.
  .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
 +Copy the name of the driver attached to the given
  .Fa device
  and
  .Fa interface
 -into the buffer given by
 +into the buffer
  .Fa name
 -and
 +of length
  .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
 @@ -275,239 +239,230 @@ 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"
  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.
 +This is needed to claim an interface already claimed 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.
 -.
 +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
 -.
  .Ft int
  .Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface"
 -Re-attach an interface kernel driver previously detached. Returns 0 on success, 
 -LIBUSB_ERROR_INVALID_PARAM if the interface does not exist, LIBUSB_ERROR_NO_DEVICE
 -if the device has been disconnect, LIBUSB_ERROR_BUSY if the driver cannot be 
 -attached because the interface is claimed by a program or driver and a 
 +Re-attach an interface kernel driver that was previously detached.
 +Returns 0 on success,
 +LIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
 +LIBUSB_ERROR_NO_DEVICE
 +if the device has been disconnected, LIBUSB_ERROR_BUSY if the driver cannot be
 +attached because the interface is claimed by a program or driver and a
  LIBUSB_ERROR code on failure.
 -.
  .Pp
 -.
  .Sh USB DESCRIPTORS
 -.
  .Pp
 -.
  .Ft int
  .Fn libusb_get_device_descriptor "libusb_device *dev" "libusb_device_descriptor *desc"
  Get the USB device descriptor for the device
  .Fa dev.
 -This is a non-blocking function. Returns 0 on success and a LIBUSB_ERROR code on 
 +This is a non-blocking function.
 +Returns 0 on success and a LIBUSB_ERROR code on
  failure.
 -.
  .Pp
 -.Ft int 
 +.Ft int
  .Fn libsub_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config"
 -Get the USB configuration descriptor for the active configuration. Returns 0 on 
 -success, returns LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state 
 -and return another LIBUSB_ERROR code on error.
 -.
 +Get the USB configuration descriptor for the active configuration.
 +Returns 0 on
 +success, LIBUSB_ERROR_NOT_FOUND if the device is in
 +an unconfigured state
 +and a LIBUSB_ERROR code on error.
  .Pp
 -.Ft int 
 +.Ft int
  .Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config"
 -Get USB configuration descriptor based on its index 
 +Get a USB configuration descriptor based on its index
  .Fa idx.
 -Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist 
 -and returns another LIBUSB_ERROR code on error.
 -.
 +Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist
 +and a LIBUSB_ERROR code on error.
  .Pp
  .Ft int
  .Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config"
 -Get a USB configuration descriptor with a specific bConfigurationValue. This is 
 -a non-blocking function which does not send request through the device. Returns 0 
 -on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist and another 
 +Get a USB configuration descriptor with a specific bConfigurationValue.
 +This is
 +a non-blocking function which does not send a request through the device.
 +Returns 0
 +on success, LIBUSB_ERROR_NOT_FOUND if the configuration
 +does not exist and a
  LIBUSB_ERROR code on failure.
 -.
  .Pp
  .Ft void
  .Fn libusb_free_config_descriptor "libusb_config_descriptor *config"
  Free a configuration descriptor.
 -.
  .Pp
  .Ft int
  .Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length"
 -Retrieve a string descriptor in C style ascii. Returns a number of byte on success 
 -and a LIBUSB_ERROR code on failure.
 -.
 +Retrieve a string descriptor in C style ASCII.
 +Returns the positive number of bytes in the resulting ASCII string
 +on success and a LIBUSB_ERROR code on failure.
  .Pp
 -.
  .Sh USB ASYNCHRONOUS I/O
 -.
  .Pp
  .Ft struct libusb_transfer *
  .Fn libusb_alloc_transfer "int iso_packets"
 -Allocate a transfer with
 -.Fa iso_packets
 -numbers of isochronous packet descriptors. Returns NULL on error.
 -.
 +Allocate a transfer with the number of isochronous packet descriptors
 +specified by
 +.Fa iso_packets .
 +Returns NULL on error.
  .Pp
  .Ft void
  .Fn libusb_free_transfer "struct libusb_transfer *tr"
  Free a transfer.
 -.
  .Pp
  .Ft int
  .Fn libusb_submit_transfer "struct libusb_transfer *tr"
 -This function will submit a transfer and returns immediately. Returns 0 on 
 -success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 
 +This function will submit a transfer and returns immediately.
 +Returns 0 on success, LIBUSB_ERROR_NO_DEVICE if
 +the device has been disconnected and a
  LIBUSB_ERROR code on other failure.
 -.
  .Pp
  .Ft int
  .Fn libusb_cancel_transfer "struct libusb_transfer *tr"
 -This function asynchronously cancel a transfer. Returns 0 on success and 
 -LIBUSB_ERROR code on failure.
 -.
 +This function asynchronously cancels a transfer.
 +Returns 0 on success and a LIBUSB_ERROR code on failure.
  .Pp
  .Sh USB SYNCHRONOUS I/O
 -.
  .Pp
  .Ft int
  .Fn libusb_control_transfer "libusb_device_handle *devh" "uint8_t bmRequestType" "uint8_t bRequest" "uint16_t wValue" "uint16_t wIndex" "unsigned char *data" "uint16_t wLength" "unsigned int timeout"
 -Perform a USB control transfer. Returns the actual number of bytes
 -transferred on success in the range from and including zero until and
 +Perform a USB control transfer.
 +Returns the actual number of bytes
 +transferred on success, in the range from and including zero up to and
  including
  .Fa wLength .
 -On error a libusb error code is returned, for example
 -LIBUSB_ERROR_TIMEOUT if the transfer timeout, LIBUSB_ERROR_PIPE if the
 +On error a LIBUSB_ERROR code is returned, for example
 +LIBUSB_ERROR_TIMEOUT if the transfer timed out, LIBUSB_ERROR_PIPE if the
  control request was not supported, LIBUSB_ERROR_NO_DEVICE if the
 -device has been disconnected or another LIBUSB_ERROR code on other failures.
 -The libusb error codes are always negative.
 -.
 +device has been disconnected and another LIBUSB_ERROR code on other failures.
 +The LIBUSB_ERROR codes are all negative.
  .Pp
  .Ft int
  .Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
  Perform an USB bulk transfer.
  A timeout value of zero means no timeout.
  The timeout value is given in milliseconds.
 -Returns 0 on success, LIBUSB_ERROR_TIMEOUT 
 -if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not 
 -supported, LIBUSB_ERROR_OVERFLOW if the device offered more data, 
 -LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 
 -LIBUSB_ERROR code on other failure.
 -.
 +Returns 0 on success, LIBUSB_ERROR_TIMEOUT
 +if the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
 +supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
 +LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
 +a LIBUSB_ERROR code on other failure.
  .Pp
  .Ft int
  .Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
  Perform an USB Interrupt transfer.
  A timeout value of zero means no timeout.
  The timeout value is given in milliseconds.
 -Returns 0 on success, LIBUSB_ERROR_TIMEOUT 
 -if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not 
 -supported, LIBUSB_ERROR_OVERFLOW if the device offered more data, 
 -LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 
 -LIBUSB_ERROR code on other failure.
 -.
 +Returns 0 on success, LIBUSB_ERROR_TIMEOUT
 +if the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
 +supported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
 +LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
 +a LIBUSB_ERROR code on other failure.
  .Pp
  .Sh USB EVENTS
 -.
  .Pp
  .Ft int
  .Fn libusb_try_lock_events "libusb_context *ctx"
 -Try to acquire the event handling lock. Returns 0 if the lock was obtained and 1
 -if not.
 -.
 +Try to acquire the event handling lock.
 +Returns 0 if the lock was obtained and 1 if not.
  .Pp
  .Ft void
  .Fn libusb_lock_events "libusb_context *ctx"
 -Acquire the event handling lock. This function is blocking.
 -.
 +Acquire the event handling lock.
 +This function is blocking.
  .Pp
  .Ft void
  .Fn libusb_unlock_events "libusb_context *ctx"
 -Release the event handling lock. This will wake up any thread blocked
 -on libusb_wait_for_event().
 -.
 +Release the event handling lock.
 +This will wake up any thread blocked
 +on
 +.B libusb_wait_for_event() .
  .Pp
  .Ft int
  .Fn libusb_event_handling_ok "libusb_context *ctx"
 -Determine if it still OK for this thread to be doing event handling. Returns 1
 -if event handling can start or continue. Returns 0 if this thread must give up
 +Determine if it still OK for this thread to be doing event handling.
 +Returns 1
 +if event handling can start or continue.
 +Returns 0 if this thread must give up
  the events lock.
 -.
  .Pp
  .Ft int
  .Fn libusb_event_handler_active "libusb_context *ctx"
 -Determine if an active thread is handling events. Returns 1 if yes and 0 if there
 +Determine if an active thread is handling events.
 +Returns 1 if there is a thread handling events and 0 if there
  are no threads currently handling events.
 -.
  .Pp
  .Ft void
  .Fn libusb_lock_event_waiters "libusb_context *ctx"
 -Acquire the event_waiters lock. This lock is designed to be obtained under the
 +Acquire the event_waiters lock.
 +This lock is designed to be obtained in the
  situation where you want to be aware when events are completed, but some other
  thread is event handling so calling libusb_handle_events() is not allowed.
 -.
  .Pp
  .Ft void
  .Fn libusb_unlock_event_waiters "libusb_context *ctx"
  Release the event_waiters lock.
 -.
  .Pp
 -.Ft int 
 +.Ft int
  .Fn libusb_wait_for_event "libusb_context *ctx" "struct timeval *tv"
 -Wait for another thread to signal completion of an event. Must be called
 -with the event waiters lock held, see libusb_lock_event_waiters(). This will
 +Wait for another thread to signal completion of an event.
 +Must be called
 +with the event waiters lock held, see libusb_lock_event_waiters().
 +This will
  block until the timeout expires or a transfer completes or a thread releases
 -the event handling lock through libusb_unlock_events(). Returns 0 after a 
 -transfer completes or another thread stops event handling, returns 1 if the
 +the event handling lock through libusb_unlock_events().
 +Returns 0 after a
 +transfer completes or another thread stops event handling, and 1 if the
  timeout expired.
 -.
  .Pp
  .Ft int
  .Fn libusb_handle_events_timeout "libusb_context *ctx" "struct timeval *tv"
 -Handle any pending events by checking if timeouts have expired and by 
 -checking the set of file descriptors for activity. Returns 0 on success, or a
 +Handle any pending events by checking if timeouts have expired and by
 +checking the set of file descriptors for activity.
 +Returns 0 on success, or a
  LIBUSB_ERROR code on failure.
 -.
  .Pp
  .Ft int
  .Fn libusb_handle_events "libusb_context *ctx"
 -Handle any pending events in blocking mode with a sensible timeout. Returns 0
 -on success, returns a LIBUSB_ERROR code on failure.
 -.
 +Handle any pending events in blocking mode with a sensible timeout.
 +Returns 0
 +on success and a LIBUSB_ERROR code on failure.
  .Pp
  .Ft int
  .Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv"
  Handle any pending events by polling file desciptors, without checking if
 -another threads are already doing so. Must be called with the event lock held.
 -.
 +another thread is already doing so.
 +Must be called with the event lock held.
  .Pp
  .Ft int
  .Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv"
 -Determine the next internal timeout that libusb needs to handle. Returns 0
 -if there are no pending timeouts, 1 if a timeout was returned, or LIBUSB_ERROR
 +Determine the next internal timeout that libusb needs to handle.
 +Returns 0
 +if there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR
  code on failure.
 -.
  .Pp
  .Ft void
  .Fn libusb_set_pollfd_notifiers "libusb_context *ctx" "libusb_pollfd_added_cb added_cb" "libusb_pollfd_removed_cb remove_cb" "void *user_data"
  Register notification functions for file descriptor additions/removals.
  These functions will be invoked for every new or removed file descriptor
  that libusb uses as an event source.
 -.
  .Pp
  .Ft const struct libusb_pollfd **
  .Fn libusb_get_pollfds "libusb_context *ctx"
 -Retrive a list of file descriptors that should be polled by your main loop as 
 -libusb event sources. Returns a NULL-terminated list on success or NULL on failure.
 -.
 +Retrive a list of file descriptors that should be polled by your main loop as
 +libusb event sources.
 +Returns a NULL-terminated list on success or NULL on failure.
  .Sh LIBUSB VERSION 0.1 COMPATIBILITY
  .Pp
  The library is also compliant with LibUSB version 0.1.12.
 @@ -544,16 +499,13 @@ The library is also compliant with LibUS
  .Fn usb_check_connected
  .Fn usb_get_driver_np
  .Fn usb_detach_kernel_driver_np
 -.
  .Sh SEE ALSO
  .Xr libusb20 3 ,
  .Xr usb 4 ,
  .Xr usbconfig 8
  .Pp
  .Pa http://libusb.sourceforge.net/
 -.
  .Sh HISTORY
 -.
  .Nm
  support first appeared in
  .Fx 8.0 .
 
 Modified: stable/8/lib/libusb/libusb.h
 ==============================================================================
 --- stable/8/lib/libusb/libusb.h	Tue Aug 23 07:17:37 2011	(r225101)
 +++ stable/8/lib/libusb/libusb.h	Tue Aug 23 07:35:21 2011	(r225102)
 @@ -151,6 +151,14 @@ enum libusb_error {
  	LIBUSB_ERROR_OTHER = -99,
  };
  
 +enum libusb_speed {
 +	LIBUSB_SPEED_UNKNOWN = 0,
 +	LIBUSB_SPEED_LOW = 1,
 +	LIBUSB_SPEED_FULL = 2,
 +	LIBUSB_SPEED_HIGH = 3,
 +	LIBUSB_SPEED_SUPER = 4,
 +};
 +
  enum libusb_transfer_status {
  	LIBUSB_TRANSFER_COMPLETED,
  	LIBUSB_TRANSFER_ERROR,
 @@ -304,6 +312,7 @@ ssize_t libusb_get_device_list(libusb_co
  void	libusb_free_device_list(libusb_device ** list, int unref_devices);
  uint8_t	libusb_get_bus_number(libusb_device * dev);
  uint8_t	libusb_get_device_address(libusb_device * dev);
 +enum libusb_speed libusb_get_device_speed(libusb_device * dev);
  int	libusb_clear_halt(libusb_device_handle *devh, uint8_t endpoint);
  int	libusb_get_max_packet_size(libusb_device * dev, uint8_t endpoint);
  libusb_device *libusb_ref_device(libusb_device * dev);
 
 Modified: stable/8/lib/libusb/libusb10.c
 ==============================================================================
 --- stable/8/lib/libusb/libusb10.c	Tue Aug 23 07:17:37 2011	(r225101)
 +++ stable/8/lib/libusb/libusb10.c	Tue Aug 23 07:35:21 2011	(r225102)
 @@ -272,6 +272,27 @@ libusb_get_device_address(libusb_device 
  	return (libusb20_dev_get_address(dev->os_priv));
  }
  
 +enum libusb_speed
 +libusb_get_device_speed(libusb_device *dev)
 +{
 +	if (dev == NULL)
 +		return (LIBUSB_SPEED_UNKNOWN);	/* should not happen */
 +
 +	switch (libusb20_dev_get_speed(dev->os_priv)) {
 +	case LIBUSB20_SPEED_LOW:
 +		return (LIBUSB_SPEED_LOW);
 +	case LIBUSB20_SPEED_FULL:
 +		return (LIBUSB_SPEED_FULL);
 +	case LIBUSB20_SPEED_HIGH:
 +		return (LIBUSB_SPEED_HIGH);
 +	case LIBUSB20_SPEED_SUPER:
 +		return (LIBUSB_SPEED_SUPER);
 +	default:
 +		break;
 +	}
 +	return (LIBUSB_SPEED_UNKNOWN);
 +}
 +
  int
  libusb_get_max_packet_size(libusb_device *dev, uint8_t endpoint)
  {
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
Responsible-Changed-From-To: freebsd-doc->eadler 
Responsible-Changed-By: eadler 
Responsible-Changed-When: Sun Mar 4 04:31:35 UTC 2012 
Responsible-Changed-Why:  
I'll take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=159898 
State-Changed-From-To: open->patched 
State-Changed-By: eadler 
State-Changed-When: Sun Mar 4 15:26:25 UTC 2012 
State-Changed-Why:  
over to committer 


Responsible-Changed-From-To: eadler->hselasky 
Responsible-Changed-By: eadler 
Responsible-Changed-When: Sun Mar 4 15:26:25 UTC 2012 
Responsible-Changed-Why:  
over to committer 

http://www.freebsd.org/cgi/query-pr.cgi?pr=159898 
State-Changed-From-To: patched->closed 
State-Changed-By: issyl0 
State-Changed-When: Sun Jul 1 10:13:48 UTC 2012 
State-Changed-Why:  
These changes were committed and merged to older versions of FreeBSD in 
2011.  Closing this PR now.  Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=159898 
>Unformatted:
