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.
This commit is contained in:
parent
49d8b9bb05
commit
de6d466666
@ -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 product by a particular vendor.
|
||||
.\"
|
||||
.\" 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 product by a particular vendor.
|
||||
.\" .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 product by a particular vendor.
|
||||
.\" .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 product by a particular vendor.
|
||||
.\" .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 before calling either
|
||||
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 values:
|
||||
.\" .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
|
||||
|
Loading…
Reference in New Issue
Block a user