Simplify logic around setting EHCI_QH_DTC and expand some htohc32(temp.sc, 0)

statements to zero.

Submitted by:	Hans Petter Selasky
This commit is contained in:
Andrew Thompson 2009-09-28 07:09:17 +00:00
parent 6450e5babf
commit 2094ecda08

View file

@ -1918,18 +1918,15 @@ ehci_setup_standard_chain(struct usb_xfer *xfer, ehci_qh_t **qh_last)
EHCI_QH_SET_MPL(xfer->max_packet_size));
if (usbd_get_speed(xfer->xroot->udev) == USB_SPEED_HIGH) {
qh_endp |= (EHCI_QH_SET_EPS(EHCI_QH_SPEED_HIGH) |
EHCI_QH_DTC);
qh_endp |= EHCI_QH_SET_EPS(EHCI_QH_SPEED_HIGH);
if (methods != &ehci_device_intr_methods)
qh_endp |= EHCI_QH_SET_NRL(8);
} else {
if (usbd_get_speed(xfer->xroot->udev) == USB_SPEED_FULL) {
qh_endp |= (EHCI_QH_SET_EPS(EHCI_QH_SPEED_FULL) |
EHCI_QH_DTC);
qh_endp |= EHCI_QH_SET_EPS(EHCI_QH_SPEED_FULL);
} else {
qh_endp |= (EHCI_QH_SET_EPS(EHCI_QH_SPEED_LOW) |
EHCI_QH_DTC);
qh_endp |= EHCI_QH_SET_EPS(EHCI_QH_SPEED_LOW);
}
if (methods == &ehci_device_ctrl_methods) {
@ -1941,6 +1938,11 @@ ehci_setup_standard_chain(struct usb_xfer *xfer, ehci_qh_t **qh_last)
}
}
if (temp.auto_data_toggle == 0) {
/* software computes the data toggle */
qh_endp |= EHCI_QH_DTC;
}
qh->qh_endp = htohc32(temp.sc, qh_endp);
qh_endphub =
@ -1951,23 +1953,17 @@ ehci_setup_standard_chain(struct usb_xfer *xfer, ehci_qh_t **qh_last)
EHCI_QH_SET_PORT(xfer->xroot->udev->hs_port_no));
qh->qh_endphub = htohc32(temp.sc, qh_endphub);
qh->qh_curqtd = htohc32(temp.sc, 0);
qh->qh_curqtd = 0;
/* fill the overlay qTD */
qh->qh_qtd.qtd_status = htohc32(temp.sc, 0);
if (temp.auto_data_toggle) {
/* let the hardware compute the data toggle */
qh->qh_endp &= htohc32(temp.sc, ~EHCI_QH_DTC);
if (xfer->endpoint->toggle_next) {
/* DATA1 is next */
qh->qh_qtd.qtd_status |=
htohc32(temp.sc, EHCI_QTD_SET_TOGGLE(1));
}
if (temp.auto_data_toggle && xfer->endpoint->toggle_next) {
/* DATA1 is next */
qh->qh_qtd.qtd_status = htohc32(temp.sc, EHCI_QTD_SET_TOGGLE(1));
} else {
qh->qh_qtd.qtd_status = 0;
}
td = xfer->td_transfer_first;
qh->qh_qtd.qtd_next = td->qtd_self;