Deleted Added
full compact
ohci.c (187172) ohci.c (187173)
1/*-
2 * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
3 * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
4 * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 12 unchanged lines hidden (view full) ---

21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
3 * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
4 * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 12 unchanged lines hidden (view full) ---

21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
29__FBSDID("$FreeBSD: head/sys/dev/usb2/controller/ohci2.c 187172 2009-01-13 19:03:01Z thompsa $");
29__FBSDID("$FreeBSD: head/sys/dev/usb2/controller/ohci2.c 187173 2009-01-13 19:03:12Z thompsa $");
30
31/*
32 * USB Open Host Controller driver.
33 *
34 * OHCI spec: http://www.compaq.com/productinfo/development/openhci.html
35 * USB spec: http://www.usb.org/developers/docs/usbspec.zip
36 */
37

--- 626 unchanged lines hidden (view full) ---

664static void
665ohci_transfer_intr_enqueue(struct usb2_xfer *xfer)
666{
667 /* check for early completion */
668 if (ohci_check_transfer(xfer)) {
669 return;
670 }
671 /* put transfer on interrupt queue */
30
31/*
32 * USB Open Host Controller driver.
33 *
34 * OHCI spec: http://www.compaq.com/productinfo/development/openhci.html
35 * USB spec: http://www.usb.org/developers/docs/usbspec.zip
36 */
37

--- 626 unchanged lines hidden (view full) ---

664static void
665ohci_transfer_intr_enqueue(struct usb2_xfer *xfer)
666{
667 /* check for early completion */
668 if (ohci_check_transfer(xfer)) {
669 return;
670 }
671 /* put transfer on interrupt queue */
672 usb2_transfer_enqueue(&xfer->udev->bus->intr_q, xfer);
672 usb2_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer);
673
674 /* start timeout, if any */
675 if (xfer->timeout != 0) {
676 usb2_transfer_timeout_ms(xfer, &ohci_timeout, xfer->timeout);
677 }
678}
679
680#define OHCI_APPEND_QH(sed,last) (last) = _ohci_append_qh(sed,last)

--- 547 unchanged lines hidden (view full) ---

1228 */
1229static void
1230ohci_timeout(void *arg)
1231{
1232 struct usb2_xfer *xfer = arg;
1233
1234 DPRINTF("xfer=%p\n", xfer);
1235
673
674 /* start timeout, if any */
675 if (xfer->timeout != 0) {
676 usb2_transfer_timeout_ms(xfer, &ohci_timeout, xfer->timeout);
677 }
678}
679
680#define OHCI_APPEND_QH(sed,last) (last) = _ohci_append_qh(sed,last)

--- 547 unchanged lines hidden (view full) ---

1228 */
1229static void
1230ohci_timeout(void *arg)
1231{
1232 struct usb2_xfer *xfer = arg;
1233
1234 DPRINTF("xfer=%p\n", xfer);
1235
1236 USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
1236 USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED);
1237
1238 /* transfer is transferred */
1239 ohci_device_done(xfer, USB_ERR_TIMEOUT);
1240}
1241
1242static void
1243ohci_do_poll(struct usb2_bus *bus)
1244{

--- 154 unchanged lines hidden (view full) ---

1399 struct usb2_pipe_methods *methods;
1400 ohci_ed_t *ed;
1401 ohci_td_t *td;
1402 uint32_t ed_flags;
1403 uint32_t x;
1404
1405 DPRINTFN(9, "addr=%d endpt=%d sumlen=%d speed=%d\n",
1406 xfer->address, UE_GET_ADDR(xfer->endpoint),
1237
1238 /* transfer is transferred */
1239 ohci_device_done(xfer, USB_ERR_TIMEOUT);
1240}
1241
1242static void
1243ohci_do_poll(struct usb2_bus *bus)
1244{

--- 154 unchanged lines hidden (view full) ---

1399 struct usb2_pipe_methods *methods;
1400 ohci_ed_t *ed;
1401 ohci_td_t *td;
1402 uint32_t ed_flags;
1403 uint32_t x;
1404
1405 DPRINTFN(9, "addr=%d endpt=%d sumlen=%d speed=%d\n",
1406 xfer->address, UE_GET_ADDR(xfer->endpoint),
1407 xfer->sumlen, usb2_get_speed(xfer->udev));
1407 xfer->sumlen, usb2_get_speed(xfer->xroot->udev));
1408
1409 temp.average = xfer->max_usb2_frame_size;
1410 temp.max_frame_size = xfer->max_frame_size;
1411
1412 /* toggle the DMA set we are using */
1413 xfer->flags_int.curr_dma_set ^= 1;
1414
1415 /* get next DMA set */

--- 128 unchanged lines hidden (view full) ---

1544 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
1545
1546 ed_flags = (OHCI_ED_SET_FA(xfer->address) |
1547 OHCI_ED_SET_EN(UE_GET_ADDR(xfer->endpoint)) |
1548 OHCI_ED_SET_MAXP(xfer->max_frame_size));
1549
1550 ed_flags |= (OHCI_ED_FORMAT_GEN | OHCI_ED_DIR_TD);
1551
1408
1409 temp.average = xfer->max_usb2_frame_size;
1410 temp.max_frame_size = xfer->max_frame_size;
1411
1412 /* toggle the DMA set we are using */
1413 xfer->flags_int.curr_dma_set ^= 1;
1414
1415 /* get next DMA set */

--- 128 unchanged lines hidden (view full) ---

1544 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
1545
1546 ed_flags = (OHCI_ED_SET_FA(xfer->address) |
1547 OHCI_ED_SET_EN(UE_GET_ADDR(xfer->endpoint)) |
1548 OHCI_ED_SET_MAXP(xfer->max_frame_size));
1549
1550 ed_flags |= (OHCI_ED_FORMAT_GEN | OHCI_ED_DIR_TD);
1551
1552 if (xfer->udev->speed == USB_SPEED_LOW) {
1552 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
1553 ed_flags |= OHCI_ED_SPEED;
1554 }
1555 ed->ed_flags = htole32(ed_flags);
1556
1557 td = xfer->td_transfer_first;
1558
1559 ed->ed_headp = td->td_self;
1560
1553 ed_flags |= OHCI_ED_SPEED;
1554 }
1555 ed->ed_flags = htole32(ed_flags);
1556
1557 td = xfer->td_transfer_first;
1558
1559 ed->ed_headp = td->td_self;
1560
1561 if (xfer->udev->pwr_save.suspended == 0) {
1561 if (xfer->xroot->udev->pwr_save.suspended == 0) {
1562 /* the append function will flush the endpoint descriptor */
1563 OHCI_APPEND_QH(ed, *ed_last);
1564
1565 if (methods == &ohci_device_bulk_methods) {
1562 /* the append function will flush the endpoint descriptor */
1563 OHCI_APPEND_QH(ed, *ed_last);
1564
1565 if (methods == &ohci_device_bulk_methods) {
1566 ohci_softc_t *sc = xfer->usb2_sc;
1566 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1567
1568 OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_BLF);
1569 }
1570 if (methods == &ohci_device_ctrl_methods) {
1567
1568 OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_BLF);
1569 }
1570 if (methods == &ohci_device_ctrl_methods) {
1571 ohci_softc_t *sc = xfer->usb2_sc;
1571 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1572
1573 OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_CLF);
1574 }
1575 } else {
1576 usb2_pc_cpu_flush(ed->page_cache);
1577 }
1578}
1579
1580static void
1581ohci_root_intr_done(struct usb2_xfer *xfer,
1582 struct usb2_sw_transfer *std)
1583{
1572
1573 OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_CLF);
1574 }
1575 } else {
1576 usb2_pc_cpu_flush(ed->page_cache);
1577 }
1578}
1579
1580static void
1581ohci_root_intr_done(struct usb2_xfer *xfer,
1582 struct usb2_sw_transfer *std)
1583{
1584 ohci_softc_t *sc = xfer->usb2_sc;
1584 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1585 uint32_t hstatus;
1586 uint16_t i;
1587 uint16_t m;
1588
1589 USB_BUS_LOCK_ASSERT(&sc->sc_bus, MA_OWNED);
1590
1591 if (std->state != USB_SW_TR_PRE_DATA) {
1592 if (std->state == USB_SW_TR_PRE_CALLBACK) {

--- 31 unchanged lines hidden (view full) ---

1624
1625/* NOTE: "done" can be run two times in a row,
1626 * from close and from interrupt
1627 */
1628static void
1629ohci_device_done(struct usb2_xfer *xfer, usb2_error_t error)
1630{
1631 struct usb2_pipe_methods *methods = xfer->pipe->methods;
1585 uint32_t hstatus;
1586 uint16_t i;
1587 uint16_t m;
1588
1589 USB_BUS_LOCK_ASSERT(&sc->sc_bus, MA_OWNED);
1590
1591 if (std->state != USB_SW_TR_PRE_DATA) {
1592 if (std->state == USB_SW_TR_PRE_CALLBACK) {

--- 31 unchanged lines hidden (view full) ---

1624
1625/* NOTE: "done" can be run two times in a row,
1626 * from close and from interrupt
1627 */
1628static void
1629ohci_device_done(struct usb2_xfer *xfer, usb2_error_t error)
1630{
1631 struct usb2_pipe_methods *methods = xfer->pipe->methods;
1632 ohci_softc_t *sc = xfer->usb2_sc;
1632 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1633 ohci_ed_t *ed;
1634
1635 USB_BUS_LOCK_ASSERT(&sc->sc_bus, MA_OWNED);
1636
1637
1638 DPRINTFN(2, "xfer=%p, pipe=%p, error=%d\n",
1639 xfer, xfer->pipe, error);
1640

--- 39 unchanged lines hidden (view full) ---

1680ohci_device_bulk_enter(struct usb2_xfer *xfer)
1681{
1682 return;
1683}
1684
1685static void
1686ohci_device_bulk_start(struct usb2_xfer *xfer)
1687{
1633 ohci_ed_t *ed;
1634
1635 USB_BUS_LOCK_ASSERT(&sc->sc_bus, MA_OWNED);
1636
1637
1638 DPRINTFN(2, "xfer=%p, pipe=%p, error=%d\n",
1639 xfer, xfer->pipe, error);
1640

--- 39 unchanged lines hidden (view full) ---

1680ohci_device_bulk_enter(struct usb2_xfer *xfer)
1681{
1682 return;
1683}
1684
1685static void
1686ohci_device_bulk_start(struct usb2_xfer *xfer)
1687{
1688 ohci_softc_t *sc = xfer->usb2_sc;
1688 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1689
1690 /* setup TD's and QH */
1691 ohci_setup_standard_chain(xfer, &sc->sc_bulk_p_last);
1692
1693 /* put transfer on interrupt queue */
1694 ohci_transfer_intr_enqueue(xfer);
1695}
1696

--- 26 unchanged lines hidden (view full) ---

1723ohci_device_ctrl_enter(struct usb2_xfer *xfer)
1724{
1725 return;
1726}
1727
1728static void
1729ohci_device_ctrl_start(struct usb2_xfer *xfer)
1730{
1689
1690 /* setup TD's and QH */
1691 ohci_setup_standard_chain(xfer, &sc->sc_bulk_p_last);
1692
1693 /* put transfer on interrupt queue */
1694 ohci_transfer_intr_enqueue(xfer);
1695}
1696

--- 26 unchanged lines hidden (view full) ---

1723ohci_device_ctrl_enter(struct usb2_xfer *xfer)
1724{
1725 return;
1726}
1727
1728static void
1729ohci_device_ctrl_start(struct usb2_xfer *xfer)
1730{
1731 ohci_softc_t *sc = xfer->usb2_sc;
1731 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1732
1733 /* setup TD's and QH */
1734 ohci_setup_standard_chain(xfer, &sc->sc_ctrl_p_last);
1735
1736 /* put transfer on interrupt queue */
1737 ohci_transfer_intr_enqueue(xfer);
1738}
1739

--- 8 unchanged lines hidden (view full) ---

1748};
1749
1750/*------------------------------------------------------------------------*
1751 * ohci interrupt support
1752 *------------------------------------------------------------------------*/
1753static void
1754ohci_device_intr_open(struct usb2_xfer *xfer)
1755{
1732
1733 /* setup TD's and QH */
1734 ohci_setup_standard_chain(xfer, &sc->sc_ctrl_p_last);
1735
1736 /* put transfer on interrupt queue */
1737 ohci_transfer_intr_enqueue(xfer);
1738}
1739

--- 8 unchanged lines hidden (view full) ---

1748};
1749
1750/*------------------------------------------------------------------------*
1751 * ohci interrupt support
1752 *------------------------------------------------------------------------*/
1753static void
1754ohci_device_intr_open(struct usb2_xfer *xfer)
1755{
1756 ohci_softc_t *sc = xfer->usb2_sc;
1756 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1757 uint16_t best;
1758 uint16_t bit;
1759 uint16_t x;
1760
1761 best = 0;
1762 bit = OHCI_NO_EDS / 2;
1763 while (bit) {
1764 if (xfer->interval >= bit) {

--- 16 unchanged lines hidden (view full) ---

1781
1782 DPRINTFN(3, "best=%d interval=%d\n",
1783 best, xfer->interval);
1784}
1785
1786static void
1787ohci_device_intr_close(struct usb2_xfer *xfer)
1788{
1757 uint16_t best;
1758 uint16_t bit;
1759 uint16_t x;
1760
1761 best = 0;
1762 bit = OHCI_NO_EDS / 2;
1763 while (bit) {
1764 if (xfer->interval >= bit) {

--- 16 unchanged lines hidden (view full) ---

1781
1782 DPRINTFN(3, "best=%d interval=%d\n",
1783 best, xfer->interval);
1784}
1785
1786static void
1787ohci_device_intr_close(struct usb2_xfer *xfer)
1788{
1789 ohci_softc_t *sc = xfer->usb2_sc;
1789 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1790
1791 sc->sc_intr_stat[xfer->qh_pos]--;
1792
1793 ohci_device_done(xfer, USB_ERR_CANCELLED);
1794}
1795
1796static void
1797ohci_device_intr_enter(struct usb2_xfer *xfer)
1798{
1799 return;
1800}
1801
1802static void
1803ohci_device_intr_start(struct usb2_xfer *xfer)
1804{
1790
1791 sc->sc_intr_stat[xfer->qh_pos]--;
1792
1793 ohci_device_done(xfer, USB_ERR_CANCELLED);
1794}
1795
1796static void
1797ohci_device_intr_enter(struct usb2_xfer *xfer)
1798{
1799 return;
1800}
1801
1802static void
1803ohci_device_intr_start(struct usb2_xfer *xfer)
1804{
1805 ohci_softc_t *sc = xfer->usb2_sc;
1805 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1806
1807 /* setup TD's and QH */
1808 ohci_setup_standard_chain(xfer, &sc->sc_intr_p_last[xfer->qh_pos]);
1809
1810 /* put transfer on interrupt queue */
1811 ohci_transfer_intr_enqueue(xfer);
1812}
1813

--- 22 unchanged lines hidden (view full) ---

1836 /**/
1837 ohci_device_done(xfer, USB_ERR_CANCELLED);
1838}
1839
1840static void
1841ohci_device_isoc_enter(struct usb2_xfer *xfer)
1842{
1843 struct usb2_page_search buf_res;
1806
1807 /* setup TD's and QH */
1808 ohci_setup_standard_chain(xfer, &sc->sc_intr_p_last[xfer->qh_pos]);
1809
1810 /* put transfer on interrupt queue */
1811 ohci_transfer_intr_enqueue(xfer);
1812}
1813

--- 22 unchanged lines hidden (view full) ---

1836 /**/
1837 ohci_device_done(xfer, USB_ERR_CANCELLED);
1838}
1839
1840static void
1841ohci_device_isoc_enter(struct usb2_xfer *xfer)
1842{
1843 struct usb2_page_search buf_res;
1844 ohci_softc_t *sc = xfer->usb2_sc;
1844 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
1845 struct ohci_hcca *hcca;
1846 uint32_t buf_offset;
1847 uint32_t nframes;
1848 uint32_t ed_flags;
1849 uint32_t *plen;
1850 uint16_t itd_offset[OHCI_ITD_NOFFSET];
1851 uint16_t length;
1852 uint8_t ncur;

--- 141 unchanged lines hidden (view full) ---

1994 ed_flags = (OHCI_ED_DIR_IN | OHCI_ED_FORMAT_ISO);
1995 else
1996 ed_flags = (OHCI_ED_DIR_OUT | OHCI_ED_FORMAT_ISO);
1997
1998 ed_flags |= (OHCI_ED_SET_FA(xfer->address) |
1999 OHCI_ED_SET_EN(UE_GET_ADDR(xfer->endpoint)) |
2000 OHCI_ED_SET_MAXP(xfer->max_frame_size));
2001
1845 struct ohci_hcca *hcca;
1846 uint32_t buf_offset;
1847 uint32_t nframes;
1848 uint32_t ed_flags;
1849 uint32_t *plen;
1850 uint16_t itd_offset[OHCI_ITD_NOFFSET];
1851 uint16_t length;
1852 uint8_t ncur;

--- 141 unchanged lines hidden (view full) ---

1994 ed_flags = (OHCI_ED_DIR_IN | OHCI_ED_FORMAT_ISO);
1995 else
1996 ed_flags = (OHCI_ED_DIR_OUT | OHCI_ED_FORMAT_ISO);
1997
1998 ed_flags |= (OHCI_ED_SET_FA(xfer->address) |
1999 OHCI_ED_SET_EN(UE_GET_ADDR(xfer->endpoint)) |
2000 OHCI_ED_SET_MAXP(xfer->max_frame_size));
2001
2002 if (xfer->udev->speed == USB_SPEED_LOW) {
2002 if (xfer->xroot->udev->speed == USB_SPEED_LOW) {
2003 ed_flags |= OHCI_ED_SPEED;
2004 }
2005 ed->ed_flags = htole32(ed_flags);
2006
2007 td = xfer->td_transfer_first;
2008
2009 ed->ed_headp = td->itd_self;
2010

--- 31 unchanged lines hidden (view full) ---

2042ohci_root_ctrl_open(struct usb2_xfer *xfer)
2043{
2044 return;
2045}
2046
2047static void
2048ohci_root_ctrl_close(struct usb2_xfer *xfer)
2049{
2003 ed_flags |= OHCI_ED_SPEED;
2004 }
2005 ed->ed_flags = htole32(ed_flags);
2006
2007 td = xfer->td_transfer_first;
2008
2009 ed->ed_headp = td->itd_self;
2010

--- 31 unchanged lines hidden (view full) ---

2042ohci_root_ctrl_open(struct usb2_xfer *xfer)
2043{
2044 return;
2045}
2046
2047static void
2048ohci_root_ctrl_close(struct usb2_xfer *xfer)
2049{
2050 ohci_softc_t *sc = xfer->usb2_sc;
2050 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
2051
2052 if (sc->sc_root_ctrl.xfer == xfer) {
2053 sc->sc_root_ctrl.xfer = NULL;
2054 }
2055 ohci_device_done(xfer, USB_ERR_CANCELLED);
2056}
2057
2058/* data structures and routines

--- 63 unchanged lines hidden (view full) ---

2122ohci_root_ctrl_enter(struct usb2_xfer *xfer)
2123{
2124 return;
2125}
2126
2127static void
2128ohci_root_ctrl_start(struct usb2_xfer *xfer)
2129{
2051
2052 if (sc->sc_root_ctrl.xfer == xfer) {
2053 sc->sc_root_ctrl.xfer = NULL;
2054 }
2055 ohci_device_done(xfer, USB_ERR_CANCELLED);
2056}
2057
2058/* data structures and routines

--- 63 unchanged lines hidden (view full) ---

2122ohci_root_ctrl_enter(struct usb2_xfer *xfer)
2123{
2124 return;
2125}
2126
2127static void
2128ohci_root_ctrl_start(struct usb2_xfer *xfer)
2129{
2130 ohci_softc_t *sc = xfer->usb2_sc;
2130 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
2131
2132 sc->sc_root_ctrl.xfer = xfer;
2133
2131
2132 sc->sc_root_ctrl.xfer = xfer;
2133
2134 usb2_bus_roothub_exec(xfer->udev->bus);
2134 usb2_bus_roothub_exec(xfer->xroot->bus);
2135}
2136
2137static void
2138ohci_root_ctrl_task(struct usb2_bus *bus)
2139{
2140 ohci_root_ctrl_poll(OHCI_BUS2SC(bus));
2141}
2142
2143static void
2144ohci_root_ctrl_done(struct usb2_xfer *xfer,
2145 struct usb2_sw_transfer *std)
2146{
2135}
2136
2137static void
2138ohci_root_ctrl_task(struct usb2_bus *bus)
2139{
2140 ohci_root_ctrl_poll(OHCI_BUS2SC(bus));
2141}
2142
2143static void
2144ohci_root_ctrl_done(struct usb2_xfer *xfer,
2145 struct usb2_sw_transfer *std)
2146{
2147 ohci_softc_t *sc = xfer->usb2_sc;
2147 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
2148 char *ptr;
2149 uint32_t port;
2150 uint32_t v;
2151 uint16_t value;
2152 uint16_t index;
2153 uint8_t l;
2154 uint8_t use_polling;
2155

--- 8 unchanged lines hidden (view full) ---

2164 }
2165 /* buffer reset */
2166 std->ptr = sc->sc_hub_desc.temp;
2167 std->len = 0;
2168
2169 value = UGETW(std->req.wValue);
2170 index = UGETW(std->req.wIndex);
2171
2148 char *ptr;
2149 uint32_t port;
2150 uint32_t v;
2151 uint16_t value;
2152 uint16_t index;
2153 uint8_t l;
2154 uint8_t use_polling;
2155

--- 8 unchanged lines hidden (view full) ---

2164 }
2165 /* buffer reset */
2166 std->ptr = sc->sc_hub_desc.temp;
2167 std->len = 0;
2168
2169 value = UGETW(std->req.wValue);
2170 index = UGETW(std->req.wIndex);
2171
2172 use_polling = mtx_owned(xfer->xfer_mtx) ? 1 : 0;
2172 use_polling = mtx_owned(xfer->xroot->xfer_mtx) ? 1 : 0;
2173
2174 DPRINTFN(3, "type=0x%02x request=0x%02x wLen=0x%04x "
2175 "wValue=0x%04x wIndex=0x%04x\n",
2176 std->req.bmRequestType, std->req.bRequest,
2177 UGETW(std->req.wLength), value, index);
2178
2179#define C(x,y) ((x) | ((y) << 8))
2180 switch (C(std->req.bRequest, std->req.bmRequestType)) {

--- 284 unchanged lines hidden (view full) ---

2465ohci_root_intr_open(struct usb2_xfer *xfer)
2466{
2467 return;
2468}
2469
2470static void
2471ohci_root_intr_close(struct usb2_xfer *xfer)
2472{
2173
2174 DPRINTFN(3, "type=0x%02x request=0x%02x wLen=0x%04x "
2175 "wValue=0x%04x wIndex=0x%04x\n",
2176 std->req.bmRequestType, std->req.bRequest,
2177 UGETW(std->req.wLength), value, index);
2178
2179#define C(x,y) ((x) | ((y) << 8))
2180 switch (C(std->req.bRequest, std->req.bmRequestType)) {

--- 284 unchanged lines hidden (view full) ---

2465ohci_root_intr_open(struct usb2_xfer *xfer)
2466{
2467 return;
2468}
2469
2470static void
2471ohci_root_intr_close(struct usb2_xfer *xfer)
2472{
2473 ohci_softc_t *sc = xfer->usb2_sc;
2473 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
2474
2475 if (sc->sc_root_intr.xfer == xfer) {
2476 sc->sc_root_intr.xfer = NULL;
2477 }
2478 ohci_device_done(xfer, USB_ERR_CANCELLED);
2479}
2480
2481static void
2482ohci_root_intr_enter(struct usb2_xfer *xfer)
2483{
2484 return;
2485}
2486
2487static void
2488ohci_root_intr_start(struct usb2_xfer *xfer)
2489{
2474
2475 if (sc->sc_root_intr.xfer == xfer) {
2476 sc->sc_root_intr.xfer = NULL;
2477 }
2478 ohci_device_done(xfer, USB_ERR_CANCELLED);
2479}
2480
2481static void
2482ohci_root_intr_enter(struct usb2_xfer *xfer)
2483{
2484 return;
2485}
2486
2487static void
2488ohci_root_intr_start(struct usb2_xfer *xfer)
2489{
2490 ohci_softc_t *sc = xfer->usb2_sc;
2490 ohci_softc_t *sc = OHCI_BUS2SC(xfer->xroot->bus);
2491
2492 sc->sc_root_intr.xfer = xfer;
2493}
2494
2495struct usb2_pipe_methods ohci_root_intr_methods =
2496{
2497 .open = ohci_root_intr_open,
2498 .close = ohci_root_intr_close,

--- 14 unchanged lines hidden (view full) ---

2513 uint32_t ntd;
2514 uint32_t nitd;
2515 uint32_t nqh;
2516 uint32_t n;
2517
2518 sc = OHCI_BUS2SC(parm->udev->bus);
2519 xfer = parm->curr_xfer;
2520
2491
2492 sc->sc_root_intr.xfer = xfer;
2493}
2494
2495struct usb2_pipe_methods ohci_root_intr_methods =
2496{
2497 .open = ohci_root_intr_open,
2498 .close = ohci_root_intr_close,

--- 14 unchanged lines hidden (view full) ---

2513 uint32_t ntd;
2514 uint32_t nitd;
2515 uint32_t nqh;
2516 uint32_t n;
2517
2518 sc = OHCI_BUS2SC(parm->udev->bus);
2519 xfer = parm->curr_xfer;
2520
2521 /*
2522 * setup xfer
2523 */
2524 xfer->usb2_sc = sc;
2525
2526 parm->hc_max_packet_size = 0x500;
2527 parm->hc_max_packet_count = 1;
2528 parm->hc_max_frame_size = OHCI_PAGE_SIZE;
2529
2530 /*
2531 * calculate ntd and nqh
2532 */
2533 if (parm->methods == &ohci_device_ctrl_methods) {

--- 214 unchanged lines hidden (view full) ---

2748 ohci_ed_t *ed;
2749
2750 DPRINTF("\n");
2751
2752 USB_BUS_LOCK(udev->bus);
2753
2754 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
2755
2521 parm->hc_max_packet_size = 0x500;
2522 parm->hc_max_packet_count = 1;
2523 parm->hc_max_frame_size = OHCI_PAGE_SIZE;
2524
2525 /*
2526 * calculate ntd and nqh
2527 */
2528 if (parm->methods == &ohci_device_ctrl_methods) {

--- 214 unchanged lines hidden (view full) ---

2743 ohci_ed_t *ed;
2744
2745 DPRINTF("\n");
2746
2747 USB_BUS_LOCK(udev->bus);
2748
2749 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
2750
2756 if (xfer->udev == udev) {
2751 if (xfer->xroot->udev == udev) {
2757
2758 methods = xfer->pipe->methods;
2759 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
2760
2761 if (methods == &ohci_device_bulk_methods) {
2762 OHCI_APPEND_QH(ed, sc->sc_bulk_p_last);
2763 OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_BLF);
2764 }

--- 21 unchanged lines hidden (view full) ---

2786 ohci_ed_t *ed;
2787
2788 DPRINTF("\n");
2789
2790 USB_BUS_LOCK(udev->bus);
2791
2792 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
2793
2752
2753 methods = xfer->pipe->methods;
2754 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
2755
2756 if (methods == &ohci_device_bulk_methods) {
2757 OHCI_APPEND_QH(ed, sc->sc_bulk_p_last);
2758 OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_BLF);
2759 }

--- 21 unchanged lines hidden (view full) ---

2781 ohci_ed_t *ed;
2782
2783 DPRINTF("\n");
2784
2785 USB_BUS_LOCK(udev->bus);
2786
2787 TAILQ_FOREACH(xfer, &sc->sc_bus.intr_q.head, wait_entry) {
2788
2794 if (xfer->udev == udev) {
2789 if (xfer->xroot->udev == udev) {
2795
2796 methods = xfer->pipe->methods;
2797 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
2798
2799 if (methods == &ohci_device_bulk_methods) {
2800 OHCI_REMOVE_QH(ed, sc->sc_bulk_p_last);
2801 }
2802 if (methods == &ohci_device_ctrl_methods) {

--- 60 unchanged lines hidden ---
2790
2791 methods = xfer->pipe->methods;
2792 ed = xfer->qh_start[xfer->flags_int.curr_dma_set];
2793
2794 if (methods == &ohci_device_bulk_methods) {
2795 OHCI_REMOVE_QH(ed, sc->sc_bulk_p_last);
2796 }
2797 if (methods == &ohci_device_ctrl_methods) {

--- 60 unchanged lines hidden ---