PERFORCE change 99040 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Mon Jun 12 07:50:15 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=99040
Change 99040 by hselasky at hselasky_mini_itx on 2006/06/12 07:47:19
New feature: If bufsize == 0, use wMaxPacketSize instead when
configuring USB transfers. This is useful for setting up interrupt
transfers.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/README#3 edit
.. //depot/projects/usb/src/sys/dev/usb/ehci.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb/ohci.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb/uhci.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#4 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/README#3 (text+ko) ====
@@ -211,8 +211,10 @@
USBD_USE_POLLING
USBD_SELF_DESTRUCT
-- The "bufsize" field sets the total pipe buffer size in bytes. 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.
- The "callback" field sets the USB callback. This field is mandatory.
==== //depot/projects/usb/src/sys/dev/usb/ehci.c#4 (text+ko) ====
@@ -3417,7 +3417,6 @@
xfer->usb_mtx = &sc->sc_bus.mtx;
xfer->usb_root = info;
xfer->flags = setup->flags;
- xfer->length = setup->bufsize;
xfer->nframes = setup->frames;
xfer->timeout = setup->timeout;
xfer->callback = setup->callback;
@@ -3453,6 +3452,12 @@
xfer->endpoint = xfer->pipe->edesc->bEndpointAddress;
xfer->max_packet_size = UGETW(xfer->pipe->edesc->wMaxPacketSize);
+ xfer->length = setup->bufsize;
+
+ if (xfer->length == 0) {
+ xfer->length = xfer->max_packet_size;
+ }
+
/* wMaxPacketSize is validated by "usbd_fill_iface_data()" */
/*
@@ -3544,7 +3549,7 @@
xfer->physbuffer = (physbuffer + size);
}
- size += setup->bufsize;
+ size += xfer->length;
/* memory is allocated at
* highest alignment
==== //depot/projects/usb/src/sys/dev/usb/ohci.c#4 (text+ko) ====
@@ -2421,7 +2421,6 @@
xfer->usb_mtx = &sc->sc_bus.mtx;
xfer->usb_root = info;
xfer->flags = setup->flags;
- xfer->length = setup->bufsize;
xfer->nframes = setup->frames;
xfer->timeout = setup->timeout;
xfer->callback = setup->callback;
@@ -2476,6 +2475,12 @@
xfer->endpoint = xfer->pipe->edesc->bEndpointAddress;
xfer->max_packet_size = UGETW(xfer->pipe->edesc->wMaxPacketSize);
+ xfer->length = setup->bufsize;
+
+ if (xfer->length == 0) {
+ xfer->length = xfer->max_packet_size;
+ }
+
/* wMaxPacketSize is validated by "usbd_fill_iface_data()" */
/*
@@ -2492,7 +2497,7 @@
}
else if(xfer->pipe->methods == &ohci_device_isoc_methods)
{
- nitd = (setup->bufsize / OHCI_PAGE_SIZE) +
+ nitd = (xfer->length / OHCI_PAGE_SIZE) +
(max_frames / OHCI_ITD_NOFFSET) + 1 /* EXTRA */;
ntd = 0;
}
@@ -2536,7 +2541,7 @@
xfer->physbuffer = (physbuffer + size);
}
- size += setup->bufsize;
+ size += xfer->length;
size += ((-size) & (OHCI_ITD_ALIGN-1)); /* align data */
==== //depot/projects/usb/src/sys/dev/usb/uhci.c#4 (text+ko) ====
@@ -2711,7 +2711,6 @@
xfer->usb_mtx = &sc->sc_bus.mtx;
xfer->usb_root = info;
xfer->flags = setup->flags;
- xfer->length = setup->bufsize;
xfer->nframes = setup->frames;
xfer->timeout = setup->timeout;
xfer->callback = setup->callback;
@@ -2747,6 +2746,12 @@
xfer->endpoint = xfer->pipe->edesc->bEndpointAddress;
xfer->max_packet_size = UGETW(xfer->pipe->edesc->wMaxPacketSize);
+ xfer->length = setup->bufsize;
+
+ if (xfer->length == 0) {
+ xfer->length = xfer->max_packet_size;
+ }
+
/* wMaxPacketSize is validated by "usbd_fill_iface_data()" */
/*
@@ -2806,7 +2811,7 @@
xfer->physbuffer = (physbuffer + size);
}
- size += setup->bufsize;
+ size += xfer->length;
size += ((-size) & (UHCI_TD_ALIGN-1)); /* align data */
==== //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#4 (text+ko) ====
@@ -251,8 +251,7 @@
for(setup = setup_start, n = n_setup; n--; setup++)
{
- if((setup->bufsize == 0) ||
- (setup->bufsize == 0xffffffff))
+ if(setup->bufsize == 0xffffffff)
{
error = USBD_BAD_BUFSIZE;
PRINTF(("invalid bufsize\n"));
More information about the p4-projects
mailing list