PERFORCE change 159529 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Mar 20 11:04:29 PDT 2009
http://perforce.freebsd.org/chv.cgi?CH=159529
Change 159529 by hselasky at hselasky_laptop001 on 2009/03/20 18:03:50
USB controller:
- correctly setup alt_next
- remove checking of ED_SKIP in OHCI, hence this
flag is only writable by software and we never
set it!
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/controller/at91dci.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/atmegadci.c#10 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/ehci.c#10 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/ohci.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/uhci.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/uss820dci.c#6 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/controller/at91dci.c#7 (text+ko) ====
@@ -888,6 +888,7 @@
temp.td = NULL;
temp.td_next = xfer->td_start[0];
temp.offset = 0;
+ temp.setup_alt_next = xfer->flags_int.short_frames_ok;
sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
ep_no = (xfer->endpoint & UE_ADDR);
@@ -901,7 +902,12 @@
temp.len = xfer->frlengths[0];
temp.pc = xfer->frbuffers + 0;
temp.short_pkt = temp.len ? 1 : 0;
- temp.setup_alt_next = 0;
+ /* check for last frame */
+ if (xfer->nframes == 1) {
+ /* no STATUS stage yet, SETUP is last */
+ if (xfer->flags_int.control_act)
+ temp.setup_alt_next = 0;
+ }
at91dci_setup_standard_chain_sub(&temp);
}
@@ -910,8 +916,6 @@
x = 0;
}
- temp.setup_alt_next = xfer->flags_int.short_frames_ok;
-
if (x != xfer->nframes) {
if (xfer->endpoint & UE_DIR_IN) {
temp.func = &at91dci_data_tx;
==== //depot/projects/usb/src/sys/dev/usb/controller/atmegadci.c#10 (text+ko) ====
@@ -792,6 +792,7 @@
temp.td = NULL;
temp.td_next = xfer->td_start[0];
temp.offset = 0;
+ temp.setup_alt_next = xfer->flags_int.short_frames_ok;
sc = ATMEGA_BUS2SC(xfer->xroot->bus);
ep_no = (xfer->endpoint & UE_ADDR);
@@ -805,7 +806,12 @@
temp.len = xfer->frlengths[0];
temp.pc = xfer->frbuffers + 0;
temp.short_pkt = temp.len ? 1 : 0;
- temp.setup_alt_next = 0;
+ /* check for last frame */
+ if (xfer->nframes == 1) {
+ /* no STATUS stage yet, SETUP is last */
+ if (xfer->flags_int.control_act)
+ temp.setup_alt_next = 0;
+ }
atmegadci_setup_standard_chain_sub(&temp);
}
@@ -814,8 +820,6 @@
x = 0;
}
- temp.setup_alt_next = xfer->flags_int.short_frames_ok;
-
if (x != xfer->nframes) {
if (xfer->endpoint & UE_DIR_IN) {
temp.func = &atmegadci_data_tx;
==== //depot/projects/usb/src/sys/dev/usb/controller/ehci.c#10 (text+ko) ====
@@ -1752,6 +1752,7 @@
temp.td_next = td;
temp.qtd_status = 0;
temp.last_frame = 0;
+ temp.setup_alt_next = xfer->flags_int.short_frames_ok;
if (xfer->flags_int.control_xfr) {
if (xfer->pipe->toggle_next) {
@@ -1784,12 +1785,13 @@
temp.len = xfer->frlengths[0];
temp.pc = xfer->frbuffers + 0;
temp.shortpkt = temp.len ? 1 : 0;
- temp.setup_alt_next = 0;
/* check for last frame */
if (xfer->nframes == 1) {
/* no STATUS stage yet, SETUP is last */
- if (xfer->flags_int.control_act)
+ if (xfer->flags_int.control_act) {
temp.last_frame = 1;
+ temp.setup_alt_next = 0;
+ }
}
ehci_setup_standard_chain_sub(&temp);
}
@@ -1798,8 +1800,6 @@
x = 0;
}
- temp.setup_alt_next = xfer->flags_int.short_frames_ok;
-
while (x != xfer->nframes) {
/* DATA0 / DATA1 message */
==== //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.c#5 (text+ko) ====
@@ -1133,6 +1133,7 @@
temp.td = NULL;
temp.td_next = xfer->td_start[0];
temp.offset = 0;
+ temp.setup_alt_next = xfer->flags_int.short_frames_ok;
sc = MUSBOTG_BUS2SC(xfer->xroot->bus);
ep_no = (xfer->endpoint & UE_ADDR);
@@ -1146,7 +1147,6 @@
temp.len = xfer->frlengths[0];
temp.pc = xfer->frbuffers + 0;
temp.short_pkt = temp.len ? 1 : 0;
- temp.setup_alt_next = 0;
musbotg_setup_standard_chain_sub(&temp);
}
@@ -1155,8 +1155,6 @@
x = 0;
}
- temp.setup_alt_next = xfer->flags_int.short_frames_ok;
-
if (x != xfer->nframes) {
if (xfer->endpoint & UE_DIR_IN) {
if (xfer->flags_int.control_xfr)
==== //depot/projects/usb/src/sys/dev/usb/controller/ohci.c#8 (text+ko) ====
@@ -1051,7 +1051,6 @@
ohci_check_transfer(struct usb2_xfer *xfer)
{
ohci_ed_t *ed;
- uint32_t ed_flags;
uint32_t ed_headp;
uint32_t ed_tailp;
@@ -1060,12 +1059,10 @@
ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
usb2_pc_cpu_invalidate(ed->page_cache);
- ed_flags = le32toh(ed->ed_flags);
ed_headp = le32toh(ed->ed_headp);
ed_tailp = le32toh(ed->ed_tailp);
- if ((ed_flags & OHCI_ED_SKIP) ||
- (ed_headp & OHCI_HALTED) ||
+ if ((ed_headp & OHCI_HALTED) ||
(((ed_headp ^ ed_tailp) & (~0xF)) == 0)) {
if (xfer->pipe->methods == &ohci_device_isoc_methods) {
/* isochronous transfer */
@@ -1442,6 +1439,7 @@
temp.td = NULL;
temp.td_next = td;
temp.last_frame = 0;
+ temp.setup_alt_next = xfer->flags_int.short_frames_ok;
methods = xfer->pipe->methods;
@@ -1456,12 +1454,13 @@
temp.len = xfer->frlengths[0];
temp.pc = xfer->frbuffers + 0;
temp.shortpkt = temp.len ? 1 : 0;
- temp.setup_alt_next = 0;
/* check for last frame */
if (xfer->nframes == 1) {
/* no STATUS stage yet, SETUP is last */
- if (xfer->flags_int.control_act)
+ if (xfer->flags_int.control_act) {
temp.last_frame = 1;
+ temp.setup_alt_next = 0;
+ }
}
ohci_setup_standard_chain_sub(&temp);
@@ -1476,7 +1475,6 @@
x = 0;
}
temp.td_flags = htole32(OHCI_TD_NOCC | OHCI_TD_NOINTR);
- temp.setup_alt_next = xfer->flags_int.short_frames_ok;
/* set data toggle */
==== //depot/projects/usb/src/sys/dev/usb/controller/uhci.c#6 (text+ko) ====
@@ -1675,6 +1675,7 @@
temp.td = NULL;
temp.td_next = td;
temp.last_frame = 0;
+ temp.setup_alt_next = xfer->flags_int.short_frames_ok;
uhci_mem_layout_init(&temp.ml, xfer);
@@ -1707,12 +1708,13 @@
temp.len = xfer->frlengths[0];
temp.ml.buf_pc = xfer->frbuffers + 0;
temp.shortpkt = temp.len ? 1 : 0;
- temp.setup_alt_next = 0;
/* check for last frame */
if (xfer->nframes == 1) {
/* no STATUS stage yet, SETUP is last */
- if (xfer->flags_int.control_act)
+ if (xfer->flags_int.control_act) {
temp.last_frame = 1;
+ temp.setup_alt_next = 0;
+ }
}
uhci_setup_standard_chain_sub(&temp);
}
@@ -1721,8 +1723,6 @@
x = 0;
}
- temp.setup_alt_next = xfer->flags_int.short_frames_ok;
-
while (x != xfer->nframes) {
/* DATA0 / DATA1 message */
==== //depot/projects/usb/src/sys/dev/usb/controller/uss820dci.c#6 (text+ko) ====
@@ -837,6 +837,7 @@
temp.td = NULL;
temp.td_next = xfer->td_start[0];
temp.offset = 0;
+ temp.setup_alt_next = xfer->flags_int.short_frames_ok;
sc = USS820_DCI_BUS2SC(xfer->xroot->bus);
ep_no = (xfer->endpoint & UE_ADDR);
@@ -850,7 +851,12 @@
temp.len = xfer->frlengths[0];
temp.pc = xfer->frbuffers + 0;
temp.short_pkt = temp.len ? 1 : 0;
- temp.setup_alt_next = 0;
+ /* check for last frame */
+ if (xfer->nframes == 1) {
+ /* no STATUS stage yet, SETUP is last */
+ if (xfer->flags_int.control_act)
+ temp.setup_alt_next = 0;
+ }
uss820dci_setup_standard_chain_sub(&temp);
}
@@ -859,8 +865,6 @@
x = 0;
}
- temp.setup_alt_next = xfer->flags_int.short_frames_ok;
-
if (x != xfer->nframes) {
if (xfer->endpoint & UE_DIR_IN) {
temp.func = &uss820dci_data_tx;
More information about the p4-projects
mailing list