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 --- |