Lines Matching full:hcd

23 #include <linux/usb/hcd.h>
34 #include "isp1760-hcd.h"
41 typedef void (packet_enqueue)(struct usb_hcd *hcd, struct isp1760_qh *qh,
44 static inline struct isp1760_hcd *hcd_to_priv(struct usb_hcd *hcd) in hcd_to_priv() argument
46 return *(struct isp1760_hcd **)hcd->hcd_priv; in hcd_to_priv()
150 /* the rest is HCD-private */
200 static u32 isp1760_hcd_read(struct usb_hcd *hcd, u32 field) in isp1760_hcd_read() argument
202 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hcd_read()
225 static void isp1760_hcd_write(struct usb_hcd *hcd, u32 field, u32 val) in isp1760_hcd_write() argument
227 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hcd_write()
235 static void isp1760_hcd_set(struct usb_hcd *hcd, u32 field) in isp1760_hcd_set() argument
237 isp1760_hcd_write(hcd, field, 0xFFFFFFFF); in isp1760_hcd_set()
240 static void isp1760_hcd_clear(struct usb_hcd *hcd, u32 field) in isp1760_hcd_clear() argument
242 isp1760_hcd_write(hcd, field, 0); in isp1760_hcd_clear()
245 static int isp1760_hcd_set_and_wait(struct usb_hcd *hcd, u32 field, in isp1760_hcd_set_and_wait() argument
248 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hcd_set_and_wait()
251 isp1760_hcd_set(hcd, field); in isp1760_hcd_set_and_wait()
257 static int isp1760_hcd_set_and_wait_swap(struct usb_hcd *hcd, u32 field, in isp1760_hcd_set_and_wait_swap() argument
260 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hcd_set_and_wait_swap()
263 isp1760_hcd_set(hcd, field); in isp1760_hcd_set_and_wait_swap()
269 static int isp1760_hcd_clear_and_wait(struct usb_hcd *hcd, u32 field, in isp1760_hcd_clear_and_wait() argument
272 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hcd_clear_and_wait()
275 isp1760_hcd_clear(hcd, field); in isp1760_hcd_clear_and_wait()
281 static bool isp1760_hcd_is_set(struct usb_hcd *hcd, u32 field) in isp1760_hcd_is_set() argument
283 return !!isp1760_hcd_read(hcd, field); in isp1760_hcd_is_set()
286 static bool isp1760_hcd_ppc_is_set(struct usb_hcd *hcd) in isp1760_hcd_ppc_is_set() argument
288 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hcd_ppc_is_set()
293 return isp1760_hcd_is_set(hcd, HCS_PPC); in isp1760_hcd_ppc_is_set()
296 static u32 isp1760_hcd_n_ports(struct usb_hcd *hcd) in isp1760_hcd_n_ports() argument
298 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hcd_n_ports()
303 return isp1760_hcd_read(hcd, HCS_N_PORTS); in isp1760_hcd_n_ports()
366 static void isp1760_mem_read(struct usb_hcd *hcd, u32 src_offset, void *dst, in isp1760_mem_read() argument
369 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_mem_read()
382 static void isp1763_mem_read(struct usb_hcd *hcd, u16 srcaddr, in isp1763_mem_read() argument
385 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1763_mem_read()
387 /* Write the starting device address to the hcd memory register */ in isp1763_mem_read()
405 static void mem_read(struct usb_hcd *hcd, u32 src_offset, __u32 *dst, in mem_read() argument
408 struct isp1760_hcd *priv = hcd_to_priv(hcd); in mem_read()
411 return isp1760_mem_read(hcd, src_offset, (u16 *)dst, bytes); in mem_read()
413 isp1763_mem_read(hcd, (u16)src_offset, (u16 *)dst, bytes); in mem_read()
451 static void isp1763_mem_write(struct usb_hcd *hcd, u16 dstaddr, u16 *src, in isp1763_mem_write() argument
454 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1763_mem_write()
456 /* Write the starting device address to the hcd memory register */ in isp1763_mem_write()
478 static void mem_write(struct usb_hcd *hcd, u32 dst_offset, __u32 *src, in mem_write() argument
481 struct isp1760_hcd *priv = hcd_to_priv(hcd); in mem_write()
486 isp1763_mem_write(hcd, dst_offset, (u16 *)src, bytes); in mem_write()
493 static void isp1760_ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, in isp1760_ptd_read() argument
497 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_ptd_read()
506 static void isp1763_ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, in isp1763_ptd_read() argument
512 isp1763_mem_read(hcd, src_offset, (u16 *)&le32_ptd, sizeof(le32_ptd)); in isp1763_ptd_read()
524 static void ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, in ptd_read() argument
527 struct isp1760_hcd *priv = hcd_to_priv(hcd); in ptd_read()
530 return isp1760_ptd_read(hcd, ptd_offset, slot, ptd); in ptd_read()
532 isp1763_ptd_read(hcd, ptd_offset, slot, ptd); in ptd_read()
535 static void isp1763_ptd_write(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, in isp1763_ptd_write() argument
550 isp1763_mem_write(hcd, dst_offset, (u16 *)&ptd.dw0, in isp1763_ptd_write()
570 static void ptd_write(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, in ptd_write() argument
573 struct isp1760_hcd *priv = hcd_to_priv(hcd); in ptd_write()
578 isp1763_ptd_write(hcd, ptd_offset, slot, ptd); in ptd_write()
603 static void alloc_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd) in alloc_mem() argument
605 struct isp1760_hcd *priv = hcd_to_priv(hcd); in alloc_mem()
624 static void free_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd) in free_mem() argument
626 struct isp1760_hcd *priv = hcd_to_priv(hcd); in free_mem()
642 dev_err(hcd->self.controller, "%s: Invalid pointer: %08x\n", in free_mem()
649 static int ehci_reset(struct usb_hcd *hcd) in ehci_reset() argument
651 struct isp1760_hcd *priv = hcd_to_priv(hcd); in ehci_reset()
653 hcd->state = HC_STATE_HALT; in ehci_reset()
656 return isp1760_hcd_set_and_wait_swap(hcd, CMD_RESET, 250 * 1000); in ehci_reset()
682 static int priv_init(struct usb_hcd *hcd) in priv_init() argument
684 struct isp1760_hcd *priv = hcd_to_priv(hcd); in priv_init()
706 isoc_cache = isp1760_hcd_read(hcd, HCC_ISOC_CACHE); in priv_init()
707 isoc_thres = isp1760_hcd_read(hcd, HCC_ISOC_THRES); in priv_init()
718 static int isp1760_hc_setup(struct usb_hcd *hcd) in isp1760_hc_setup() argument
720 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hc_setup()
731 isp1760_hcd_write(hcd, HC_SCRATCH, pattern); in isp1760_hc_setup()
737 isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); in isp1760_hc_setup()
738 scratch = isp1760_hcd_read(hcd, HC_SCRATCH); in isp1760_hc_setup()
740 dev_err(hcd->self.controller, "Scratch test failed. 0x%08x\n", in isp1760_hc_setup()
753 isp1760_hcd_clear(hcd, ISO_BUF_FILL); in isp1760_hc_setup()
754 isp1760_hcd_clear(hcd, INT_BUF_FILL); in isp1760_hc_setup()
755 isp1760_hcd_clear(hcd, ATL_BUF_FILL); in isp1760_hc_setup()
757 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); in isp1760_hc_setup()
758 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); in isp1760_hc_setup()
759 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); in isp1760_hc_setup()
761 result = ehci_reset(hcd); in isp1760_hc_setup()
773 isp1760_hcd_set(hcd, atx_reset); in isp1760_hc_setup()
775 isp1760_hcd_clear(hcd, atx_reset); in isp1760_hc_setup()
778 isp1760_hcd_set(hcd, HW_OTG_DISABLE); in isp1760_hc_setup()
779 isp1760_hcd_set(hcd, HW_SW_SEL_HC_DC_CLEAR); in isp1760_hc_setup()
780 isp1760_hcd_set(hcd, HW_HC_2_DIS_CLEAR); in isp1760_hc_setup()
783 isp1760_hcd_set(hcd, HW_INTF_LOCK); in isp1760_hc_setup()
786 isp1760_hcd_set(hcd, HC_INT_IRQ_ENABLE); in isp1760_hc_setup()
787 isp1760_hcd_set(hcd, HC_ATL_IRQ_ENABLE); in isp1760_hc_setup()
789 return priv_init(hcd); in isp1760_hc_setup()
950 static void isp1760_urb_done(struct usb_hcd *hcd, struct urb *urb) in isp1760_urb_done() argument
954 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_urb_done()
969 /* complete() can reenter this HCD */ in isp1760_urb_done()
970 usb_hcd_unlink_urb_from_ep(hcd, urb); in isp1760_urb_done()
972 usb_hcd_giveback_urb(hcd, urb, urb->status); in isp1760_urb_done()
1000 static void start_bus_transfer(struct usb_hcd *hcd, u32 ptd_offset, int slot, in start_bus_transfer() argument
1005 struct isp1760_hcd *priv = hcd_to_priv(hcd); in start_bus_transfer()
1020 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); in start_bus_transfer()
1021 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, in start_bus_transfer()
1023 priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP); in start_bus_transfer()
1026 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); in start_bus_transfer()
1027 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, in start_bus_transfer()
1029 priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP); in start_bus_transfer()
1039 ptd_write(hcd, ptd_offset, slot, ptd); in start_bus_transfer()
1042 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map); in start_bus_transfer()
1044 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map); in start_bus_transfer()
1053 static void collect_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh, in collect_qtds() argument
1073 mem_read(hcd, qtd->payload_addr, in collect_qtds()
1095 free_mem(hcd, qtd); in collect_qtds()
1116 static void enqueue_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh) in enqueue_qtds() argument
1118 struct isp1760_hcd *priv = hcd_to_priv(hcd); in enqueue_qtds()
1158 alloc_mem(hcd, qtd); in enqueue_qtds()
1164 mem_write(hcd, qtd->payload_addr, in enqueue_qtds()
1174 dev_dbg(hcd->self.controller, "%s: No slot " in enqueue_qtds()
1184 start_bus_transfer(hcd, ptd_offset, free_slot, in enqueue_qtds()
1196 static void schedule_ptds(struct usb_hcd *hcd) in schedule_ptds() argument
1205 if (!hcd) { in schedule_ptds()
1210 priv = hcd_to_priv(hcd); in schedule_ptds()
1218 collect_qtds(hcd, qh, &urb_list); in schedule_ptds()
1226 isp1760_urb_done(hcd, urb_listitem->urb); in schedule_ptds()
1257 enqueue_qtds(hcd, qh); in schedule_ptds()
1265 static int check_int_transfer(struct usb_hcd *hcd, struct ptd *ptd, in check_int_transfer() argument
1284 dev_dbg(hcd->self.controller, "%s: underrun " in check_int_transfer()
1290 dev_dbg(hcd->self.controller, "%s: transaction " in check_int_transfer()
1297 dev_dbg(hcd->self.controller, "%s: babble " in check_int_transfer()
1312 static int check_atl_transfer(struct usb_hcd *hcd, struct ptd *ptd, in check_atl_transfer() argument
1324 dev_dbg(hcd->self.controller, "%s: ptd error:\n" in check_atl_transfer()
1336 dev_dbg(hcd->self.controller, "PID error; reloading ptd\n"); in check_atl_transfer()
1352 static void handle_done_ptds(struct usb_hcd *hcd) in handle_done_ptds() argument
1354 struct isp1760_hcd *priv = hcd_to_priv(hcd); in handle_done_ptds()
1365 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); in handle_done_ptds()
1367 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); in handle_done_ptds()
1385 ptd_read(hcd, INT_PTD_OFFSET, slot, &ptd); in handle_done_ptds()
1386 state = check_int_transfer(hcd, &ptd, in handle_done_ptds()
1400 ptd_read(hcd, ATL_PTD_OFFSET, slot, &ptd); in handle_done_ptds()
1401 state = check_atl_transfer(hcd, &ptd, in handle_done_ptds()
1471 dev_err(hcd->self.controller, in handle_done_ptds()
1481 start_bus_transfer(hcd, ptd_offset, slot, slots, qtd, in handle_done_ptds()
1487 schedule_ptds(hcd); in handle_done_ptds()
1490 static irqreturn_t isp1760_irq(struct usb_hcd *hcd) in isp1760_irq() argument
1492 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_irq()
1499 if (!(hcd->state & HC_STATE_RUNNING)) in isp1760_irq()
1502 imask = isp1760_hcd_read(hcd, HC_INTERRUPT); in isp1760_irq()
1510 priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP); in isp1760_irq()
1511 priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP); in isp1760_irq()
1513 handle_done_ptds(hcd); in isp1760_irq()
1555 struct usb_hcd *hcd = errata2_timer_hcd; in errata2_function() local
1556 struct isp1760_hcd *priv = hcd_to_priv(hcd); in errata2_function()
1568 ptd_read(hcd, ATL_PTD_OFFSET, slot, &ptd); in errata2_function()
1575 handle_done_ptds(hcd); in errata2_function()
1583 static int isp1763_run(struct usb_hcd *hcd) in isp1763_run() argument
1585 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1763_run()
1593 hcd->uses_new_polling = 1; in isp1763_run()
1594 hcd->state = HC_STATE_RUNNING; in isp1763_run()
1596 chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); in isp1763_run()
1597 chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW); in isp1763_run()
1598 chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV); in isp1763_run()
1599 dev_info(hcd->self.controller, "USB ISP %02x%02x HW rev. %d started\n", in isp1763_run()
1602 isp1760_hcd_clear(hcd, ISO_BUF_FILL); in isp1763_run()
1603 isp1760_hcd_clear(hcd, INT_BUF_FILL); in isp1763_run()
1604 isp1760_hcd_clear(hcd, ATL_BUF_FILL); in isp1763_run()
1606 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); in isp1763_run()
1607 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); in isp1763_run()
1608 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); in isp1763_run()
1610 isp1760_hcd_clear(hcd, HC_ATL_PTD_DONEMAP); in isp1763_run()
1611 isp1760_hcd_clear(hcd, HC_INT_PTD_DONEMAP); in isp1763_run()
1612 isp1760_hcd_clear(hcd, HC_ISO_PTD_DONEMAP); in isp1763_run()
1614 isp1760_hcd_set(hcd, HW_OTG_DISABLE); in isp1763_run()
1619 isp1760_hcd_set(hcd, HC_INT_IRQ_ENABLE); in isp1763_run()
1620 isp1760_hcd_set(hcd, HC_ATL_IRQ_ENABLE); in isp1763_run()
1622 isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN); in isp1763_run()
1624 isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND); in isp1763_run()
1625 isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND); in isp1763_run()
1626 isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND); in isp1763_run()
1628 isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR); in isp1763_run()
1629 isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR); in isp1763_run()
1630 isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR); in isp1763_run()
1635 isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int); in isp1763_run()
1636 isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int); in isp1763_run()
1637 isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso); in isp1763_run()
1639 isp1760_hcd_set(hcd, ATL_BUF_FILL); in isp1763_run()
1640 isp1760_hcd_set(hcd, INT_BUF_FILL); in isp1763_run()
1642 isp1760_hcd_clear(hcd, CMD_LRESET); in isp1763_run()
1643 isp1760_hcd_clear(hcd, CMD_RESET); in isp1763_run()
1645 retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000); in isp1763_run()
1650 retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000); in isp1763_run()
1658 static int isp1760_run(struct usb_hcd *hcd) in isp1760_run() argument
1660 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_run()
1674 return isp1763_run(hcd); in isp1760_run()
1676 hcd->uses_new_polling = 1; in isp1760_run()
1678 hcd->state = HC_STATE_RUNNING; in isp1760_run()
1681 isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND); in isp1760_run()
1682 isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND); in isp1760_run()
1683 isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND); in isp1760_run()
1685 isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR); in isp1760_run()
1686 isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR); in isp1760_run()
1687 isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR); in isp1760_run()
1691 isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN); in isp1760_run()
1693 isp1760_hcd_clear(hcd, CMD_LRESET); in isp1760_run()
1694 isp1760_hcd_clear(hcd, CMD_RESET); in isp1760_run()
1696 retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000); in isp1760_run()
1707 retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000); in isp1760_run()
1712 errata2_timer_hcd = hcd; in isp1760_run()
1717 chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); in isp1760_run()
1718 chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW); in isp1760_run()
1719 chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV); in isp1760_run()
1720 dev_info(hcd->self.controller, "USB ISP %02x%02x HW rev. %d started\n", in isp1760_run()
1729 isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int); in isp1760_run()
1730 isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int); in isp1760_run()
1731 isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso); in isp1760_run()
1733 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); in isp1760_run()
1734 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); in isp1760_run()
1735 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); in isp1760_run()
1737 isp1760_hcd_set(hcd, ATL_BUF_FILL); in isp1760_run()
1738 isp1760_hcd_set(hcd, INT_BUF_FILL); in isp1760_run()
1770 static void packetize_urb(struct usb_hcd *hcd, in packetize_urb() argument
1773 struct isp1760_hcd *priv = hcd_to_priv(hcd); in packetize_urb()
1786 dev_err(hcd->self.controller, in packetize_urb()
1878 static int isp1760_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, in isp1760_urb_enqueue() argument
1881 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_urb_enqueue()
1903 dev_err(hcd->self.controller, "%s: isochronous USB packets " in isp1760_urb_enqueue()
1908 dev_err(hcd->self.controller, "%s: unknown pipe type\n", in isp1760_urb_enqueue()
1916 packetize_urb(hcd, urb, &new_qtds, mem_flags); in isp1760_urb_enqueue()
1922 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) { in isp1760_urb_enqueue()
1927 retval = usb_hcd_link_urb_to_ep(hcd, urb); in isp1760_urb_enqueue()
1948 usb_hcd_unlink_urb_from_ep(hcd, urb); in isp1760_urb_enqueue()
1957 schedule_ptds(hcd); in isp1760_urb_enqueue()
1964 static void kill_transfer(struct usb_hcd *hcd, struct urb *urb, in kill_transfer() argument
1967 struct isp1760_hcd *priv = hcd_to_priv(hcd); in kill_transfer()
1976 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); in kill_transfer()
1978 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map); in kill_transfer()
1985 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); in kill_transfer()
1987 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map); in kill_transfer()
2000 static void dequeue_urb_from_qtd(struct usb_hcd *hcd, struct isp1760_qh *qh, in dequeue_urb_from_qtd() argument
2019 kill_transfer(hcd, urb, qh); in dequeue_urb_from_qtd()
2031 static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, in isp1760_urb_dequeue() argument
2034 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_urb_dequeue()
2041 retval = usb_hcd_check_unlink_urb(hcd, urb, status); in isp1760_urb_dequeue()
2053 dequeue_urb_from_qtd(hcd, qh, qtd); in isp1760_urb_dequeue()
2059 schedule_ptds(hcd); in isp1760_urb_dequeue()
2066 static void isp1760_endpoint_disable(struct usb_hcd *hcd, in isp1760_endpoint_disable() argument
2069 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_endpoint_disable()
2092 schedule_ptds(hcd); in isp1760_endpoint_disable()
2098 static int isp1760_hub_status_data(struct usb_hcd *hcd, char *buf) in isp1760_hub_status_data() argument
2100 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hub_status_data()
2106 if (!HC_IS_RUNNING(hcd->state)) in isp1760_hub_status_data()
2114 if (isp1760_hcd_is_set(hcd, PORT_OWNER) && in isp1760_hub_status_data()
2115 isp1760_hcd_is_set(hcd, PORT_CSC)) { in isp1760_hub_status_data()
2116 isp1760_hcd_clear(hcd, PORT_CSC); in isp1760_hub_status_data()
2126 if (isp1760_hcd_is_set(hcd, PORT_CSC) || in isp1760_hub_status_data()
2127 (isp1760_hcd_is_set(hcd, PORT_RESUME) && in isp1760_hub_status_data()
2144 ports = isp1760_hcd_n_ports(priv->hcd); in isp1760_hub_descriptor()
2161 if (isp1760_hcd_ppc_is_set(priv->hcd)) in isp1760_hub_descriptor()
2172 static void check_reset_complete(struct usb_hcd *hcd, int index) in check_reset_complete() argument
2174 if (!(isp1760_hcd_is_set(hcd, PORT_CONNECT))) in check_reset_complete()
2178 if (!isp1760_hcd_is_set(hcd, PORT_PE)) { in check_reset_complete()
2179 dev_info(hcd->self.controller, in check_reset_complete()
2182 isp1760_hcd_set(hcd, PORT_OWNER); in check_reset_complete()
2184 isp1760_hcd_clear(hcd, PORT_CSC); in check_reset_complete()
2186 dev_info(hcd->self.controller, "port %d high speed\n", in check_reset_complete()
2193 static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq, in isp1760_hub_control() argument
2196 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hub_control()
2202 ports = isp1760_hcd_n_ports(hcd); in isp1760_hub_control()
2237 isp1760_hcd_clear(hcd, PORT_PE); in isp1760_hub_control()
2243 if (isp1760_hcd_is_set(hcd, PORT_RESET)) in isp1760_hub_control()
2246 if (isp1760_hcd_is_set(hcd, PORT_SUSPEND)) { in isp1760_hub_control()
2247 if (!isp1760_hcd_is_set(hcd, PORT_PE)) in isp1760_hub_control()
2250 isp1760_hcd_clear(hcd, PORT_CSC); in isp1760_hub_control()
2251 isp1760_hcd_set(hcd, PORT_RESUME); in isp1760_hub_control()
2261 if (isp1760_hcd_ppc_is_set(hcd)) in isp1760_hub_control()
2262 isp1760_hcd_clear(hcd, PORT_POWER); in isp1760_hub_control()
2265 isp1760_hcd_set(hcd, PORT_CSC); in isp1760_hub_control()
2276 isp1760_hcd_read(hcd, CMD_RUN); in isp1760_hub_control()
2293 if (isp1760_hcd_is_set(hcd, PORT_CSC)) in isp1760_hub_control()
2297 if (isp1760_hcd_is_set(hcd, PORT_RESUME)) { in isp1760_hub_control()
2298 dev_err(hcd->self.controller, "Port resume should be skipped.\n"); in isp1760_hub_control()
2306 mod_timer(&hcd->rh_timer, priv->reset_done); in isp1760_hub_control()
2316 isp1760_hcd_clear(hcd, PORT_CSC); in isp1760_hub_control()
2318 retval = isp1760_hcd_clear_and_wait(hcd, in isp1760_hub_control()
2321 dev_err(hcd->self.controller, in isp1760_hub_control()
2330 if (isp1760_hcd_is_set(hcd, PORT_RESET) && in isp1760_hub_control()
2339 retval = isp1760_hcd_clear_and_wait(hcd, PORT_RESET, in isp1760_hub_control()
2342 dev_err(hcd->self.controller, "port %d reset error %d\n", in isp1760_hub_control()
2348 check_reset_complete(hcd, wIndex); in isp1760_hub_control()
2356 if (isp1760_hcd_is_set(hcd, PORT_OWNER)) in isp1760_hub_control()
2357 dev_err(hcd->self.controller, "PORT_OWNER is set\n"); in isp1760_hub_control()
2359 if (isp1760_hcd_is_set(hcd, PORT_CONNECT)) { in isp1760_hub_control()
2364 if (isp1760_hcd_is_set(hcd, PORT_PE)) in isp1760_hub_control()
2366 if (isp1760_hcd_is_set(hcd, PORT_SUSPEND) && in isp1760_hub_control()
2367 isp1760_hcd_is_set(hcd, PORT_RESUME)) in isp1760_hub_control()
2369 if (isp1760_hcd_is_set(hcd, PORT_RESET)) in isp1760_hub_control()
2371 if (isp1760_hcd_is_set(hcd, PORT_POWER)) in isp1760_hub_control()
2392 if (isp1760_hcd_is_set(hcd, PORT_OWNER)) in isp1760_hub_control()
2397 isp1760_hcd_set(hcd, PORT_PE); in isp1760_hub_control()
2401 if (!isp1760_hcd_is_set(hcd, PORT_PE) || in isp1760_hub_control()
2402 isp1760_hcd_is_set(hcd, PORT_RESET)) in isp1760_hub_control()
2405 isp1760_hcd_set(hcd, PORT_SUSPEND); in isp1760_hub_control()
2408 if (isp1760_hcd_ppc_is_set(hcd)) in isp1760_hub_control()
2409 isp1760_hcd_set(hcd, PORT_POWER); in isp1760_hub_control()
2412 if (isp1760_hcd_is_set(hcd, PORT_RESUME)) in isp1760_hub_control()
2418 if ((isp1760_hcd_is_set(hcd, PORT_CONNECT) && in isp1760_hub_control()
2419 !isp1760_hcd_is_set(hcd, PORT_PE)) && in isp1760_hub_control()
2420 (isp1760_hcd_read(hcd, PORT_LSTATUS) == 1)) { in isp1760_hub_control()
2421 isp1760_hcd_set(hcd, PORT_OWNER); in isp1760_hub_control()
2423 isp1760_hcd_set(hcd, PORT_RESET); in isp1760_hub_control()
2424 isp1760_hcd_clear(hcd, PORT_PE); in isp1760_hub_control()
2448 static int isp1760_get_frame(struct usb_hcd *hcd) in isp1760_get_frame() argument
2450 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_get_frame()
2453 fr = isp1760_hcd_read(hcd, HC_FRINDEX); in isp1760_get_frame()
2457 static void isp1760_stop(struct usb_hcd *hcd) in isp1760_stop() argument
2459 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_stop()
2463 isp1760_hub_control(hcd, ClearPortFeature, USB_PORT_FEAT_POWER, 1, in isp1760_stop()
2468 ehci_reset(hcd); in isp1760_stop()
2470 isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN); in isp1760_stop()
2473 isp1760_hcd_clear(hcd, FLAG_CF); in isp1760_stop()
2476 static void isp1760_shutdown(struct usb_hcd *hcd) in isp1760_shutdown() argument
2478 isp1760_stop(hcd); in isp1760_shutdown()
2480 isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN); in isp1760_shutdown()
2482 isp1760_hcd_clear(hcd, CMD_RUN); in isp1760_shutdown()
2485 static void isp1760_clear_tt_buffer_complete(struct usb_hcd *hcd, in isp1760_clear_tt_buffer_complete() argument
2488 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_clear_tt_buffer_complete()
2497 schedule_ptds(hcd); in isp1760_clear_tt_buffer_complete()
2503 .description = "isp1760-hcd",
2566 struct usb_hcd *hcd; in isp1760_hcd_register() local
2569 hcd = usb_create_hcd(&isp1760_hc_driver, dev, dev_name(dev)); in isp1760_hcd_register()
2570 if (!hcd) in isp1760_hcd_register()
2573 *(struct isp1760_hcd **)hcd->hcd_priv = priv; in isp1760_hcd_register()
2575 priv->hcd = hcd; in isp1760_hcd_register()
2593 hcd->irq = irq; in isp1760_hcd_register()
2594 hcd->rsrc_start = mem->start; in isp1760_hcd_register()
2595 hcd->rsrc_len = resource_size(mem); in isp1760_hcd_register()
2598 hcd->cant_recv_wakeups = 1; in isp1760_hcd_register()
2600 ret = usb_add_hcd(hcd, irq, irqflags); in isp1760_hcd_register()
2604 device_wakeup_enable(hcd->self.controller); in isp1760_hcd_register()
2613 usb_put_hcd(hcd); in isp1760_hcd_register()
2619 if (!priv->hcd) in isp1760_hcd_unregister()
2622 usb_remove_hcd(priv->hcd); in isp1760_hcd_unregister()
2623 usb_put_hcd(priv->hcd); in isp1760_hcd_unregister()