Module Name:    src
Committed By:   mrg
Date:           Sun Jun  3 02:23:38 UTC 2012

Modified Files:
        src/share/man/man9: usbdi.9

Log Message:
add documentation for:
- usbd_alloc_buffer
- usbd_free_buffe
- usbd_get_buffer
- usbd_do_request
- usbd_do_request_flags

begin to document the changes present on the USBMP branch:
- usbd_sync_transfer_sig
- usb_detach_wait
- usb_detach_broadcast

create a new section on device detachment.  XXX needs a code example.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/share/man/man9/usbdi.9

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man9/usbdi.9
diff -u src/share/man/man9/usbdi.9:1.19 src/share/man/man9/usbdi.9:1.20
--- src/share/man/man9/usbdi.9:1.19	Sat Jun  2 23:39:03 2012
+++ src/share/man/man9/usbdi.9	Sun Jun  3 02:23:37 2012
@@ -1,4 +1,4 @@
-.\"	$NetBSD: usbdi.9,v 1.19 2012/06/02 23:39:03 mrg Exp $
+.\"	$NetBSD: usbdi.9,v 1.20 2012/06/03 02:23:37 mrg Exp $
 .\"
 .\" Copyright (c) 2012 Matthew R. Green
 .\" All rights reserved.
@@ -124,9 +124,8 @@
 .Fn usbd_get_buffer "usbd_xfer_handle xfer"
 .Ft usbd_status
 .Fn usbd_sync_transfer "usbd_xfer_handle req"
-.\" only in usbmp
-.\" .Ft usbd_status
-.\" .Fn usbd_sync_transfer_sig "usbd_xfer_handle req"
+.Ft usbd_status
+.Fn usbd_sync_transfer_sig "usbd_xfer_handle req"
 .Ft usbd_status
 .Fn usbd_open_pipe_intr "usbd_interface_handle iface" "uint8_t address" \
  "uint8_t flags" "usbd_pipe_handle *pipe" \
@@ -156,6 +155,9 @@
 .Fn usbd_fill_deviceinfo "usbd_device_handle dev" "struct usb_device_info *di"
 .Ft int
 .Fn usbd_get_interface_altindex "usbd_interface_handle iface"
+.Ft usb_endpoint_descriptor_t *
+.Fn usbd_get_endpoint_descriptor "usbd_interface_handle dev" \
+ "u_int8_t address"
 .Ft usb_interface_descriptor_t *
 .Fn usbd_find_idesc "usb_config_descriptor_t *cd" "int iindex" "int ano"
 .Ft usb_endpoint_descriptor_t *
@@ -177,9 +179,6 @@
 .Fn usbd_devinfo_free "char *str"
 .Ft const struct usbd_quirks *
 .Fn usbd_get_quirks "usbd_device_handle iface"
-.Ft usb_endpoint_descriptor_t *
-.Fn usbd_get_endpoint_descriptor "usbd_interface_handle dev" \
- "u_int8_t address"
 .Ft usbd_status
 .Fn usbd_reload_device_desc "usbd_device_handle iface"
 .Ft int
@@ -276,10 +275,10 @@ through
 .Fn usb_detach_waitold "device_t dv"
 .Ft void
 .Fn usb_detach_wakeupold "device_t dv"
-.\" .Ft void
-.\" .Fn usb_detach_wait "device_t dv" "kcondvar_t *cv" "kmutex_t *lk"
-.\" .Ft void
-.\" .Fn usb_detach_broadcast "device_t dv" "kcondvar_t *cv"
+.Ft void
+.Fn usb_detach_wait "device_t dv" "kcondvar_t *cv" "kmutex_t *lk"
+.Ft void
+.Fn usb_detach_broadcast "device_t dv" "kcondvar_t *cv"
 .Sh DESCRIPTION
 Device driver access to the USB bus centers around transfers.
 A transfer describes a communication with a USB device.
@@ -297,7 +296,6 @@ See the
 and
 .Sx PIPES
 sections for more details.
-
 .Pp
 There are a number of functions to obtain a handle, descriptor
 of resource count:
@@ -388,16 +386,6 @@ macro can be used to match any USB produ
 .\"
 .\" XXX functions missing descriptions in usbdi.h XXX
 .\"
-.\" .Fn usbd_alloc_buffer "usbd_xfer_handle req" "uint32_t size"
-.\" .Fn usbd_free_buffer "usbd_xfer_handle req"
-.\" .Fn usbd_get_buffer "usbd_xfer_handle xfer"
-.\" only in usbmp
-.\" .Fn usbd_sync_transfer_sig "usbd_xfer_handle req"
-.\" .Fn usbd_do_request "usbd_device_handle dev" "usb_device_request_t *req" \
-.\"  "void *data"
-.\" .Fn usbd_do_request_flags "usbd_device_handle dev" \
-.\"  "usb_device_request_t *req" "void *data" "uint16_t flags" "int *actlen" \
-.\"  "u_int32_t timo"
 .\" .Fn usbd_get_interface_descriptor "usbd_interface_handle iface"
 .\" .Fn usbd_get_config_descriptor "usbd_device_handle dev"
 .\" .Fn usbd_get_device_descriptor "usbd_device_handle dev"
@@ -406,6 +394,8 @@ macro can be used to match any USB produ
 .\" .Fn usbd_get_interface "usbd_interface_handle iface" "uint8_t *aiface"
 .\" .Fn usbd_fill_deviceinfo "usbd_device_handle dev" "struct usb_device_info *di"
 .\" .Fn usbd_get_interface_altindex "usbd_interface_handle iface"
+.\" .Fn usbd_get_endpoint_descriptor "usbd_interface_handle dev" \
+.\"  "u_int8_t address"
 .\" .Fn usbd_find_idesc "usb_config_descriptor_t *cd" "int iindex" "int ano"
 .\" .Fn usbd_find_edesc "usb_config_descriptor_t *cd" "int ifaceidx" "int altidx" \
 .\"  "int endptidx"
@@ -419,8 +409,6 @@ macro can be used to match any USB produ
 .\" .Fn usbd_devinfo_free "char *str"
 .\"
 .\" .Fn usbd_get_quirks "usbd_device_handle iface"
-.\" .Fn usbd_get_endpoint_descriptor "usbd_interface_handle dev" \
-.\"  "u_int8_t address"
 .\" .Fn usbd_reload_device_desc "usbd_device_handle iface"
 .\" .Fn usbd_ratecheck "struct timeval *tv"
 .\" .Fn usbd_get_string "usbd_device_handle iface" "int si" "char *buf"
@@ -494,15 +482,6 @@ macro can be used to match any USB produ
 .\" .Ft usbd_status
 .\" .Fn usbd_set_config_index "usbd_device_handle dev" "int index" "int msg"
 .\" .Ft usbd_status
-.\" .\" these are very different in usbmp
-.\" .Ft void
-.\" .Fn usb_detach_waitold "device_t dv"
-.\" .Ft void
-.\" .Fn usb_detach_wakeupold "device_t dv"
-.\" .Ft void
-.\" .Fn usb_detach_wait "device_t dv" "kcondvar_t *cv" "kmutex_t *lk"
-.\" .Ft void
-.\" .Fn usb_detach_broadcast "device_t dv" "kcondvar_t *cv"
 .\"
 .Pp
 .Sh PIPES
@@ -601,6 +580,22 @@ Short reads are not an error
 Force last short packet on write
 .El
 .Pp
+To allocate buffers suitable for USB tranfers (i.e., DMA capable), the
+.Fn usbd_alloc_buffer
+function should be used on the specified
+.Fa xfer
+for
+.Fa size
+bytes of space.
+The
+.Fn usbd_free_buffer
+function can be used to free the buffer after use.
+The
+.Fn usbd_get_buffer
+function returns the current kernel address for the DMA-capable buffer
+in
+.Fa xfer .
+.Pp
 Upon completion the
 .Fa callback
 function is called, which takes the completed
@@ -655,6 +650,7 @@ with the
 and
 .Dv USBD_SYNCHRONOUS_SIG
 flags set.
+This function is only available with the USB SMP code.
 .Pp
 Transfers are aborted via this pipe with
 .Fn usbd_abort_pipe
@@ -678,6 +674,27 @@ which must be initialised as necessary b
 or
 .Fn usbd_do_request_flags
 to submit the request.
+For both these functions
+.Fa dev
+is the handle of the USB device the request is for,
+.Fa req
+is the USB request, as described in the
+.Sx INITIALISING USB REQUESTS
+section, and then
+.Fa data
+is a buffer containing the data
+.\" (if any)????
+for the request.  For the
+.Fn usbd_do_request_flags
+function there are additional
+.Fa flags
+passed to the
+.Fa usbd_setup
+function,
+.Fa actlen
+a pointer to fill in with the actual length of this request, and
+.Fa timo ,
+the number of milliseconds to wait before timing out this request.
 .Sh INITIALISING USB REQUESTS
 There are 5 members of a
 .Va usb_device_request_t
@@ -866,6 +883,43 @@ member may be one of the following value
 .\" .It Dv UR_SET_INTERFACE
 .\" this isn't supported
 .\" .It Dv UR_SYNCH_FRAME
+.Sh USB DEVICE DETACHMENT
+There are two functions available to ease the detach of active devices.
+Typically a reference count is maintained on syscall activity.
+When a USB device is to be detached, the reference count should be
+decremented and if it is greater or equal to zero, 
+.Fn usb_detach_wait
+should be called on the 
+.Ft dv
+associated with this USB device and, typically, a device-specific
+condition variable
+.Fa cv .
+and mutex
+.Fa lk
+protecting this reference count state.
+At the end of each syscall function, if the reference count is decremented
+to less than zero, then
+.Fn usb_detach_broadcast
+must be called on the
+.Ft dv
+and
+.Fa cv
+that is being waited on with 
+.Fn usb_detach_wait .
+.Pp
+These functions are only available with the USB SMP code.
+.Pp
+The are another pair of functions with similar functionality that do not
+use a condition variable or mutex and should be avoided in new code.
+The 
+.Fn usb_detach_waitold
+function works like 
+.Fn usb_detach_wait ,
+and the
+.Fn usb_detach_wakeupold
+function works like
+.Fn usb_detach_broadcast .
+.\" XXX add an actual code example.
 .Sh SEE ALSO
 .Xr usb 4 ,
 .Xr usbd_status 9

Reply via email to