PERFORCE change 101022 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Sat Jul 8 15:01:06 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=101022
Change 101022 by hselasky at hselasky_mini_itx on 2006/07/08 15:00:47
Added new flag "USBD_USE_DMA". Updated the documentation.
Fixed some typos.
USBD_USE_DMA:
This flag will cause the USB host controller driver to not
allocate a second data buffer, "xfer->buffer". Instead of
transferring data using "xfer->buffer", data must be
transferred by a call to "usbd_copy_in(&(xfer->buf_data),
offset, src, len)" or "usbd_copy_out(&(xfer->buf_data),
offset, dst, len)". This saves an extra data copy.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/README#5 edit
.. //depot/projects/usb/src/sys/dev/usb/ugen.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#7 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/README#5 (text+ko) ====
@@ -37,7 +37,7 @@
One must setup the USB transfer, struct usbd_xfer, from the
callback handler, which is required for non-blocking operation, in the end.
-This behaviour is also very practical when writing USB device drivers, because
+This behavior is also very practical when writing USB device drivers, because
it is easy to make a loop, starting the next transfer from the previous.
Simply reorder the labels! The callback's lock is locked by the caller. This
solves synchronization problems related to stopping USB transfers.
@@ -218,24 +218,56 @@
- The "flags" field allows one to set flags for the transfer. Valid flags are:
USBD_SYNCHRONOUS
+ This flag can only be used with the default callback,
+ "usbd_default_callback()", and will cause the
+ "usbd_transfer_start()" function to sleep, exiting all
+ mutexes, until the transfer is finished. This flag is
+ depreciated.
+
USBD_FORCE_SHORT_XFER
+ This flag forces the last USB packet sent to be short. A short
+ packet has a length of less than "xfer->max_packet_size", which
+ derives from "wMaxPacketSize".
+
USBD_SHORT_XFER_OK
+ This flag allows the transfer length, "xfer->actlen" to be
+ less than "xfer->length", upon completion of a transfer.
+
USBD_CUSTOM_CLEARSTALL
+
USBD_USE_POLLING
+ This flag can be used with any callback and will cause the
+ "usbd_transfer_start()" function to wait, using "DELAY()",
+ without exiting any mutexes, until the transfer is finished or
+ has timed out.
+
USBD_SELF_DESTRUCT
+ This flag allows one to free a transfer from its
+ callback function.
+
+ USBD_USE_DMA
+ This flag will cause the USB host controller driver to not
+ allocate a second data buffer, "xfer->buffer". Instead of
+ transferring data using "xfer->buffer", data must be
+ transferred by a call to "usbd_copy_in(&(xfer->buf_data),
+ offset, src, len)" or "usbd_copy_out(&(xfer->buf_data),
+ offset, dst, len)". This saves an extra data copy.
+
+- The "bufsize" field sets the total buffer size in bytes. If
+ this field is zero, "wMaxPacketSize" will be used, multiplied by the
+ "frames" field if the transfer type is isochronous. This is useful for
+ setting up interrupt pipes. This field is mandatory.
-- The "bufsize" field sets the total pipe buffer size in bytes. If
- this field is zero, "wMaxPacketSize" will be used. This is useful for
- setting up interrupt pipes. For control transfers "bufsize" includes the
- length of the request structure. This field is mandatory.
+ NOTE: For control transfers "bufsize" includes
+ the length of the request structure.
- The "callback" field sets the USB callback. This field is mandatory.
MUTEX NOTE:
===========
-When you create a mutex, using "mtx_init()", don't forget to call "mtx_destroy()" at detach,
-else you can get freed memory accessed panics.
+When you create a mutex, using "mtx_init()", don't forget to call
+"mtx_destroy()" at detach, else you can get "freed memory accessed"
+panics.
--HPS
-
==== //depot/projects/usb/src/sys/dev/usb/ugen.c#5 (text+ko) ====
@@ -1918,7 +1918,8 @@
if(usbd_do_request_flags
(sc->sc_udev, &ur->ucr_request, data,
- ur->ucr_flags, &ur->ucr_actlen, USBD_DEFAULT_TIMEOUT))
+ (ur->ucr_flags & USBD_SHORT_XFER_OK), &ur->ucr_actlen,
+ USBD_DEFAULT_TIMEOUT))
{
error = EIO;
break;
==== //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#7 (text+ko) ====
@@ -271,7 +271,8 @@
USBD_SHORT_XFER_OK|
USBD_CUSTOM_CLEARSTALL|
USBD_USE_POLLING|
- USBD_SELF_DESTRUCT)))
+ USBD_SELF_DESTRUCT|
+ USBD_USE_DMA)))
{
error = USBD_BAD_FLAG;
PRINTF(("invalid flag(s) specified: "
More information about the p4-projects
mailing list