Lines Matching refs:hcd

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()
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()
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()
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()
951 static void isp1760_urb_done(struct usb_hcd *hcd, struct urb *urb) in isp1760_urb_done() argument
955 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_urb_done()
971 usb_hcd_unlink_urb_from_ep(hcd, urb); in isp1760_urb_done()
973 usb_hcd_giveback_urb(hcd, urb, urb->status); in isp1760_urb_done()
1001 static void start_bus_transfer(struct usb_hcd *hcd, u32 ptd_offset, int slot, in start_bus_transfer() argument
1006 struct isp1760_hcd *priv = hcd_to_priv(hcd); in start_bus_transfer()
1021 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); in start_bus_transfer()
1022 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, in start_bus_transfer()
1024 priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP); in start_bus_transfer()
1027 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); in start_bus_transfer()
1028 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, in start_bus_transfer()
1030 priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP); in start_bus_transfer()
1040 ptd_write(hcd, ptd_offset, slot, ptd); in start_bus_transfer()
1043 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map); in start_bus_transfer()
1045 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map); in start_bus_transfer()
1054 static void collect_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh, in collect_qtds() argument
1074 mem_read(hcd, qtd->payload_addr, in collect_qtds()
1096 free_mem(hcd, qtd); in collect_qtds()
1117 static void enqueue_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh) in enqueue_qtds() argument
1119 struct isp1760_hcd *priv = hcd_to_priv(hcd); in enqueue_qtds()
1159 alloc_mem(hcd, qtd); in enqueue_qtds()
1165 mem_write(hcd, qtd->payload_addr, in enqueue_qtds()
1185 start_bus_transfer(hcd, ptd_offset, free_slot, in enqueue_qtds()
1197 static void schedule_ptds(struct usb_hcd *hcd) in schedule_ptds() argument
1206 if (!hcd) { in schedule_ptds()
1211 priv = hcd_to_priv(hcd); in schedule_ptds()
1219 collect_qtds(hcd, qh, &urb_list); in schedule_ptds()
1227 isp1760_urb_done(hcd, urb_listitem->urb); in schedule_ptds()
1258 enqueue_qtds(hcd, qh); in schedule_ptds()
1266 static int check_int_transfer(struct usb_hcd *hcd, struct ptd *ptd, in check_int_transfer() argument
1285 dev_dbg(hcd->self.controller, "%s: underrun " in check_int_transfer()
1291 dev_dbg(hcd->self.controller, "%s: transaction " in check_int_transfer()
1298 dev_dbg(hcd->self.controller, "%s: babble " in check_int_transfer()
1313 static int check_atl_transfer(struct usb_hcd *hcd, struct ptd *ptd, in check_atl_transfer() argument
1337 dev_dbg(hcd->self.controller, "PID error; reloading ptd\n"); in check_atl_transfer()
1353 static void handle_done_ptds(struct usb_hcd *hcd) in handle_done_ptds() argument
1355 struct isp1760_hcd *priv = hcd_to_priv(hcd); in handle_done_ptds()
1366 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); in handle_done_ptds()
1368 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); in handle_done_ptds()
1386 ptd_read(hcd, INT_PTD_OFFSET, slot, &ptd); in handle_done_ptds()
1387 state = check_int_transfer(hcd, &ptd, in handle_done_ptds()
1401 ptd_read(hcd, ATL_PTD_OFFSET, slot, &ptd); in handle_done_ptds()
1402 state = check_atl_transfer(hcd, &ptd, in handle_done_ptds()
1472 dev_err(hcd->self.controller, in handle_done_ptds()
1482 start_bus_transfer(hcd, ptd_offset, slot, slots, qtd, in handle_done_ptds()
1488 schedule_ptds(hcd); in handle_done_ptds()
1491 static irqreturn_t isp1760_irq(struct usb_hcd *hcd) in isp1760_irq() argument
1493 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_irq()
1500 if (!(hcd->state & HC_STATE_RUNNING)) in isp1760_irq()
1503 imask = isp1760_hcd_read(hcd, HC_INTERRUPT); in isp1760_irq()
1511 priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP); in isp1760_irq()
1512 priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP); in isp1760_irq()
1514 handle_done_ptds(hcd); in isp1760_irq()
1556 struct usb_hcd *hcd = errata2_timer_hcd; in errata2_function() local
1557 struct isp1760_hcd *priv = hcd_to_priv(hcd); in errata2_function()
1569 ptd_read(hcd, ATL_PTD_OFFSET, slot, &ptd); in errata2_function()
1576 handle_done_ptds(hcd); in errata2_function()
1584 static int isp1763_run(struct usb_hcd *hcd) in isp1763_run() argument
1586 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1763_run()
1594 hcd->uses_new_polling = 1; in isp1763_run()
1595 hcd->state = HC_STATE_RUNNING; in isp1763_run()
1597 chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); in isp1763_run()
1598 chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW); in isp1763_run()
1599 chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV); in isp1763_run()
1600 dev_info(hcd->self.controller, "USB ISP %02x%02x HW rev. %d started\n", in isp1763_run()
1603 isp1760_hcd_clear(hcd, ISO_BUF_FILL); in isp1763_run()
1604 isp1760_hcd_clear(hcd, INT_BUF_FILL); in isp1763_run()
1605 isp1760_hcd_clear(hcd, ATL_BUF_FILL); in isp1763_run()
1607 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); in isp1763_run()
1608 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); in isp1763_run()
1609 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); in isp1763_run()
1611 isp1760_hcd_clear(hcd, HC_ATL_PTD_DONEMAP); in isp1763_run()
1612 isp1760_hcd_clear(hcd, HC_INT_PTD_DONEMAP); in isp1763_run()
1613 isp1760_hcd_clear(hcd, HC_ISO_PTD_DONEMAP); in isp1763_run()
1615 isp1760_hcd_set(hcd, HW_OTG_DISABLE); in isp1763_run()
1620 isp1760_hcd_set(hcd, HC_INT_IRQ_ENABLE); in isp1763_run()
1621 isp1760_hcd_set(hcd, HC_ATL_IRQ_ENABLE); in isp1763_run()
1623 isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN); in isp1763_run()
1625 isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND); in isp1763_run()
1626 isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND); in isp1763_run()
1627 isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND); in isp1763_run()
1629 isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR); in isp1763_run()
1630 isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR); in isp1763_run()
1631 isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR); in isp1763_run()
1636 isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int); in isp1763_run()
1637 isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int); in isp1763_run()
1638 isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso); in isp1763_run()
1640 isp1760_hcd_set(hcd, ATL_BUF_FILL); in isp1763_run()
1641 isp1760_hcd_set(hcd, INT_BUF_FILL); in isp1763_run()
1643 isp1760_hcd_clear(hcd, CMD_LRESET); in isp1763_run()
1644 isp1760_hcd_clear(hcd, CMD_RESET); in isp1763_run()
1646 retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000); in isp1763_run()
1651 retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000); in isp1763_run()
1659 static int isp1760_run(struct usb_hcd *hcd) in isp1760_run() argument
1661 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_run()
1675 return isp1763_run(hcd); in isp1760_run()
1677 hcd->uses_new_polling = 1; in isp1760_run()
1679 hcd->state = HC_STATE_RUNNING; in isp1760_run()
1682 isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND); in isp1760_run()
1683 isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND); in isp1760_run()
1684 isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND); in isp1760_run()
1686 isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR); in isp1760_run()
1687 isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR); in isp1760_run()
1688 isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR); in isp1760_run()
1692 isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN); in isp1760_run()
1694 isp1760_hcd_clear(hcd, CMD_LRESET); in isp1760_run()
1695 isp1760_hcd_clear(hcd, CMD_RESET); in isp1760_run()
1697 retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000); in isp1760_run()
1708 retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000); in isp1760_run()
1713 errata2_timer_hcd = hcd; in isp1760_run()
1718 chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); in isp1760_run()
1719 chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW); in isp1760_run()
1720 chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV); in isp1760_run()
1721 dev_info(hcd->self.controller, "USB ISP %02x%02x HW rev. %d started\n", in isp1760_run()
1730 isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int); in isp1760_run()
1731 isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int); in isp1760_run()
1732 isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso); in isp1760_run()
1734 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); in isp1760_run()
1735 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); in isp1760_run()
1736 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); in isp1760_run()
1738 isp1760_hcd_set(hcd, ATL_BUF_FILL); in isp1760_run()
1739 isp1760_hcd_set(hcd, INT_BUF_FILL); in isp1760_run()
1772 static void packetize_urb(struct usb_hcd *hcd, in packetize_urb() argument
1775 struct isp1760_hcd *priv = hcd_to_priv(hcd); in packetize_urb()
1788 dev_err(hcd->self.controller, in packetize_urb()
1881 static int isp1760_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, in isp1760_urb_enqueue() argument
1884 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_urb_enqueue()
1906 dev_err(hcd->self.controller, "%s: isochronous USB packets " in isp1760_urb_enqueue()
1911 dev_err(hcd->self.controller, "%s: unknown pipe type\n", in isp1760_urb_enqueue()
1919 packetize_urb(hcd, urb, &new_qtds, mem_flags); in isp1760_urb_enqueue()
1925 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) { in isp1760_urb_enqueue()
1930 retval = usb_hcd_link_urb_to_ep(hcd, urb); in isp1760_urb_enqueue()
1951 usb_hcd_unlink_urb_from_ep(hcd, urb); in isp1760_urb_enqueue()
1960 schedule_ptds(hcd); in isp1760_urb_enqueue()
1967 static void kill_transfer(struct usb_hcd *hcd, struct urb *urb, in kill_transfer() argument
1970 struct isp1760_hcd *priv = hcd_to_priv(hcd); in kill_transfer()
1979 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); in kill_transfer()
1981 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map); in kill_transfer()
1988 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); in kill_transfer()
1990 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map); in kill_transfer()
2003 static void dequeue_urb_from_qtd(struct usb_hcd *hcd, struct isp1760_qh *qh, in dequeue_urb_from_qtd() argument
2022 kill_transfer(hcd, urb, qh); in dequeue_urb_from_qtd()
2034 static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, in isp1760_urb_dequeue() argument
2037 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_urb_dequeue()
2044 retval = usb_hcd_check_unlink_urb(hcd, urb, status); in isp1760_urb_dequeue()
2056 dequeue_urb_from_qtd(hcd, qh, qtd); in isp1760_urb_dequeue()
2062 schedule_ptds(hcd); in isp1760_urb_dequeue()
2069 static void isp1760_endpoint_disable(struct usb_hcd *hcd, in isp1760_endpoint_disable() argument
2072 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_endpoint_disable()
2095 schedule_ptds(hcd); in isp1760_endpoint_disable()
2101 static int isp1760_hub_status_data(struct usb_hcd *hcd, char *buf) in isp1760_hub_status_data() argument
2103 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hub_status_data()
2109 if (!HC_IS_RUNNING(hcd->state)) in isp1760_hub_status_data()
2117 if (isp1760_hcd_is_set(hcd, PORT_OWNER) && in isp1760_hub_status_data()
2118 isp1760_hcd_is_set(hcd, PORT_CSC)) { in isp1760_hub_status_data()
2119 isp1760_hcd_clear(hcd, PORT_CSC); in isp1760_hub_status_data()
2129 if (isp1760_hcd_is_set(hcd, PORT_CSC) || in isp1760_hub_status_data()
2130 (isp1760_hcd_is_set(hcd, PORT_RESUME) && in isp1760_hub_status_data()
2147 ports = isp1760_hcd_n_ports(priv->hcd); in isp1760_hub_descriptor()
2164 if (isp1760_hcd_ppc_is_set(priv->hcd)) in isp1760_hub_descriptor()
2175 static void check_reset_complete(struct usb_hcd *hcd, int index) in check_reset_complete() argument
2177 if (!(isp1760_hcd_is_set(hcd, PORT_CONNECT))) in check_reset_complete()
2181 if (!isp1760_hcd_is_set(hcd, PORT_PE)) { in check_reset_complete()
2182 dev_info(hcd->self.controller, in check_reset_complete()
2185 isp1760_hcd_set(hcd, PORT_OWNER); in check_reset_complete()
2187 isp1760_hcd_clear(hcd, PORT_CSC); in check_reset_complete()
2189 dev_info(hcd->self.controller, "port %d high speed\n", in check_reset_complete()
2196 static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq, in isp1760_hub_control() argument
2199 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_hub_control()
2205 ports = isp1760_hcd_n_ports(hcd); in isp1760_hub_control()
2240 isp1760_hcd_clear(hcd, PORT_PE); in isp1760_hub_control()
2246 if (isp1760_hcd_is_set(hcd, PORT_RESET)) in isp1760_hub_control()
2249 if (isp1760_hcd_is_set(hcd, PORT_SUSPEND)) { in isp1760_hub_control()
2250 if (!isp1760_hcd_is_set(hcd, PORT_PE)) in isp1760_hub_control()
2253 isp1760_hcd_clear(hcd, PORT_CSC); in isp1760_hub_control()
2254 isp1760_hcd_set(hcd, PORT_RESUME); in isp1760_hub_control()
2264 if (isp1760_hcd_ppc_is_set(hcd)) in isp1760_hub_control()
2265 isp1760_hcd_clear(hcd, PORT_POWER); in isp1760_hub_control()
2268 isp1760_hcd_set(hcd, PORT_CSC); in isp1760_hub_control()
2279 isp1760_hcd_read(hcd, CMD_RUN); in isp1760_hub_control()
2296 if (isp1760_hcd_is_set(hcd, PORT_CSC)) in isp1760_hub_control()
2300 if (isp1760_hcd_is_set(hcd, PORT_RESUME)) { in isp1760_hub_control()
2301 dev_err(hcd->self.controller, "Port resume should be skipped.\n"); in isp1760_hub_control()
2309 mod_timer(&hcd->rh_timer, priv->reset_done); in isp1760_hub_control()
2319 isp1760_hcd_clear(hcd, PORT_CSC); in isp1760_hub_control()
2321 retval = isp1760_hcd_clear_and_wait(hcd, in isp1760_hub_control()
2324 dev_err(hcd->self.controller, in isp1760_hub_control()
2333 if (isp1760_hcd_is_set(hcd, PORT_RESET) && in isp1760_hub_control()
2342 retval = isp1760_hcd_clear_and_wait(hcd, PORT_RESET, in isp1760_hub_control()
2345 dev_err(hcd->self.controller, "port %d reset error %d\n", in isp1760_hub_control()
2351 check_reset_complete(hcd, wIndex); in isp1760_hub_control()
2359 if (isp1760_hcd_is_set(hcd, PORT_OWNER)) in isp1760_hub_control()
2360 dev_err(hcd->self.controller, "PORT_OWNER is set\n"); in isp1760_hub_control()
2362 if (isp1760_hcd_is_set(hcd, PORT_CONNECT)) { in isp1760_hub_control()
2367 if (isp1760_hcd_is_set(hcd, PORT_PE)) in isp1760_hub_control()
2369 if (isp1760_hcd_is_set(hcd, PORT_SUSPEND) && in isp1760_hub_control()
2370 isp1760_hcd_is_set(hcd, PORT_RESUME)) in isp1760_hub_control()
2372 if (isp1760_hcd_is_set(hcd, PORT_RESET)) in isp1760_hub_control()
2374 if (isp1760_hcd_is_set(hcd, PORT_POWER)) in isp1760_hub_control()
2395 if (isp1760_hcd_is_set(hcd, PORT_OWNER)) in isp1760_hub_control()
2400 isp1760_hcd_set(hcd, PORT_PE); in isp1760_hub_control()
2404 if (!isp1760_hcd_is_set(hcd, PORT_PE) || in isp1760_hub_control()
2405 isp1760_hcd_is_set(hcd, PORT_RESET)) in isp1760_hub_control()
2408 isp1760_hcd_set(hcd, PORT_SUSPEND); in isp1760_hub_control()
2411 if (isp1760_hcd_ppc_is_set(hcd)) in isp1760_hub_control()
2412 isp1760_hcd_set(hcd, PORT_POWER); in isp1760_hub_control()
2415 if (isp1760_hcd_is_set(hcd, PORT_RESUME)) in isp1760_hub_control()
2421 if ((isp1760_hcd_is_set(hcd, PORT_CONNECT) && in isp1760_hub_control()
2422 !isp1760_hcd_is_set(hcd, PORT_PE)) && in isp1760_hub_control()
2423 (isp1760_hcd_read(hcd, PORT_LSTATUS) == 1)) { in isp1760_hub_control()
2424 isp1760_hcd_set(hcd, PORT_OWNER); in isp1760_hub_control()
2426 isp1760_hcd_set(hcd, PORT_RESET); in isp1760_hub_control()
2427 isp1760_hcd_clear(hcd, PORT_PE); in isp1760_hub_control()
2451 static int isp1760_get_frame(struct usb_hcd *hcd) in isp1760_get_frame() argument
2453 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_get_frame()
2456 fr = isp1760_hcd_read(hcd, HC_FRINDEX); in isp1760_get_frame()
2460 static void isp1760_stop(struct usb_hcd *hcd) in isp1760_stop() argument
2462 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_stop()
2466 isp1760_hub_control(hcd, ClearPortFeature, USB_PORT_FEAT_POWER, 1, in isp1760_stop()
2471 ehci_reset(hcd); in isp1760_stop()
2473 isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN); in isp1760_stop()
2476 isp1760_hcd_clear(hcd, FLAG_CF); in isp1760_stop()
2479 static void isp1760_shutdown(struct usb_hcd *hcd) in isp1760_shutdown() argument
2481 isp1760_stop(hcd); in isp1760_shutdown()
2483 isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN); in isp1760_shutdown()
2485 isp1760_hcd_clear(hcd, CMD_RUN); in isp1760_shutdown()
2488 static void isp1760_clear_tt_buffer_complete(struct usb_hcd *hcd, in isp1760_clear_tt_buffer_complete() argument
2491 struct isp1760_hcd *priv = hcd_to_priv(hcd); in isp1760_clear_tt_buffer_complete()
2500 schedule_ptds(hcd); in isp1760_clear_tt_buffer_complete()
2569 struct usb_hcd *hcd; in isp1760_hcd_register() local
2572 hcd = usb_create_hcd(&isp1760_hc_driver, dev, dev_name(dev)); in isp1760_hcd_register()
2573 if (!hcd) in isp1760_hcd_register()
2576 *(struct isp1760_hcd **)hcd->hcd_priv = priv; in isp1760_hcd_register()
2578 priv->hcd = hcd; in isp1760_hcd_register()
2596 hcd->irq = irq; in isp1760_hcd_register()
2597 hcd->rsrc_start = mem->start; in isp1760_hcd_register()
2598 hcd->rsrc_len = resource_size(mem); in isp1760_hcd_register()
2601 hcd->cant_recv_wakeups = 1; in isp1760_hcd_register()
2603 ret = usb_add_hcd(hcd, irq, irqflags); in isp1760_hcd_register()
2607 device_wakeup_enable(hcd->self.controller); in isp1760_hcd_register()
2616 usb_put_hcd(hcd); in isp1760_hcd_register()
2622 if (!priv->hcd) in isp1760_hcd_unregister()
2625 usb_remove_hcd(priv->hcd); in isp1760_hcd_unregister()
2626 usb_put_hcd(priv->hcd); in isp1760_hcd_unregister()