PERFORCE change 174976 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Mon Feb 22 16:20:15 UTC 2010
http://p4web.freebsd.org/chv.cgi?CH=174976
Change 174976 by hselasky at hselasky_laptop001 on 2010/02/22 16:20:14
USB template bugfix:
- isochronous endpoint descriptors should
have two more bytes which are zero by default.
- patch by HPS @
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/template/usb_template.c#13 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/template/usb_template.c#13 (text+ko) ====
@@ -162,15 +162,23 @@
const void **rd;
uint16_t old_size;
uint16_t mps;
- uint8_t ea = 0; /* Endpoint Address */
- uint8_t et = 0; /* Endpiont Type */
+ uint8_t ea; /* Endpoint Address */
+ uint8_t et; /* Endpiont Type */
/* Reserve memory */
old_size = temp->size;
- temp->size += sizeof(*ed);
+
+ ea = (ted->bEndpointAddress & (UE_ADDR | UE_DIR_IN | UE_DIR_OUT));
+ et = (ted->bmAttributes & UE_XFERTYPE);
+
+ if (et == UE_ISOCHRONOUS) {
+ /* account for extra byte fields */
+ temp->size += sizeof(*ed) + 2;
+ } else {
+ temp->size += sizeof(*ed);
+ }
/* Scan all Raw Descriptors first */
-
rd = ted->ppRawDesc;
if (rd) {
while (*rd) {
@@ -192,8 +200,6 @@
/* escape for Zero Max Packet Size */
mps = 0;
}
- ea = (ted->bEndpointAddress & (UE_ADDR | UE_DIR_IN | UE_DIR_OUT));
- et = (ted->bmAttributes & UE_XFERTYPE);
/*
* Fill out the real USB endpoint descriptor
@@ -201,7 +207,10 @@
*/
if (temp->buf) {
ed = USB_ADD_BYTES(temp->buf, old_size);
- ed->bLength = sizeof(*ed);
+ if (et == UE_ISOCHRONOUS)
+ ed->bLength = sizeof(*ed) + 2;
+ else
+ ed->bLength = sizeof(*ed);
ed->bDescriptorType = UDESC_ENDPOINT;
ed->bEndpointAddress = ea;
ed->bmAttributes = ted->bmAttributes;
More information about the p4-projects
mailing list