PERFORCE change 159674 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Mon Mar 23 07:33:27 PDT 2009
http://perforce.freebsd.org/chv.cgi?CH=159674
Change 159674 by hselasky at hselasky_laptop001 on 2009/03/23 14:32:55
USB controller (Device Side Mode):
- fix more corner cases around reception of SETUP packets.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/controller/at91dci.c#10 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/atmegadci.c#14 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/uss820dci.c#9 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/controller/at91dci.c#10 (text+ko) ====
==== //depot/projects/usb/src/sys/dev/usb/controller/atmegadci.c#14 (text+ko) ====
@@ -306,7 +306,10 @@
ATMEGA_UECONX_STALLRQ);
td->did_stall = 1;
}
-
+ if (temp & ATMEGA_UEINTX_RXSTPI) {
+ /* clear SETUP packet interrupt */
+ ATMEGA_WRITE_1(sc, ATMEGA_UEINTX, ~ATMEGA_UEINTX_RXSTPI);
+ }
/* we only want to know if there is a SETUP packet */
ATMEGA_WRITE_1(sc, ATMEGA_UEIENX, ATMEGA_UEIENX_RXSTPE);
return (1); /* not complete */
==== //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.c#8 (text+ko) ====
@@ -292,11 +292,15 @@
if (count != td->remainder) {
DPRINTFN(0, "Invalid SETUP packet "
"length, %d bytes\n", count);
+ MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL,
+ MUSB2_MASK_CSR0L_RXPKTRDY_CLR);
goto not_complete;
}
if (count != sizeof(req)) {
DPRINTFN(0, "Unsupported SETUP packet "
"length, %d bytes\n", count);
+ MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL,
+ MUSB2_MASK_CSR0L_RXPKTRDY_CLR);
goto not_complete;
}
/* receive data */
==== //depot/projects/usb/src/sys/dev/usb/controller/uss820dci.c#9 (text+ko) ====
@@ -275,12 +275,12 @@
if (count != td->remainder) {
DPRINTFN(0, "Invalid SETUP packet "
"length, %d bytes\n", count);
- goto not_complete;
+ goto setup_not_complete;
}
if (count != sizeof(req)) {
DPRINTFN(0, "Unsupported SETUP packet "
"length, %d bytes\n", count);
- goto not_complete;
+ goto setup_not_complete;
}
/* receive data */
bus_space_read_multi_1(td->io_tag, td->io_hdl,
@@ -323,13 +323,22 @@
}
return (0); /* complete */
+setup_not_complete:
+
+ /* set RXFFRC bit */
+ temp = bus_space_read_1(td->io_tag, td->io_hdl,
+ td->rx_cntl_reg);
+ temp |= USS820_RXCON_RXFFRC;
+ bus_space_write_1(td->io_tag, td->io_hdl,
+ td->rx_cntl_reg, temp);
+
+ /* FALLTHROUGH */
+
not_complete:
/* abort any ongoing transfer */
if (!td->did_stall) {
DPRINTFN(5, "stalling\n");
-
/* set stall */
-
uss820dci_update_shared_1(sc, USS820_EPCON, 0xFF,
(USS820_EPCON_TXSTL | USS820_EPCON_RXSTL));
More information about the p4-projects
mailing list