Lines Matching defs:hcd

21 #include <linux/usb/hcd.h>
32 #include "isp1760-hcd.h"
39 typedef void (packet_enqueue)(struct usb_hcd *hcd, struct isp1760_qh *qh,
42 static inline struct isp1760_hcd *hcd_to_priv(struct usb_hcd *hcd)
44 return *(struct isp1760_hcd **)hcd->hcd_priv;
337 static void alloc_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
339 struct isp1760_hcd *priv = hcd_to_priv(hcd);
357 static void free_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
359 struct isp1760_hcd *priv = hcd_to_priv(hcd);
374 dev_err(hcd->self.controller, "%s: Invalid pointer: %08x\n",
380 static int handshake(struct usb_hcd *hcd, u32 reg,
386 ret = readl_poll_timeout_atomic(hcd->regs + reg, result,
396 static int ehci_reset(struct usb_hcd *hcd)
398 struct isp1760_hcd *priv = hcd_to_priv(hcd);
400 u32 command = reg_read32(hcd->regs, HC_USBCMD);
403 reg_write32(hcd->regs, HC_USBCMD, command);
404 hcd->state = HC_STATE_HALT;
407 return handshake(hcd, HC_USBCMD, CMD_RESET, 0, 250 * 1000);
433 static int priv_init(struct usb_hcd *hcd)
435 struct isp1760_hcd *priv = hcd_to_priv(hcd);
451 hcc_params = reg_read32(hcd->regs, HC_HCCPARAMS);
461 static int isp1760_hc_setup(struct usb_hcd *hcd)
463 struct isp1760_hcd *priv = hcd_to_priv(hcd);
467 reg_write32(hcd->regs, HC_SCRATCH_REG, 0xdeadbabe);
469 scratch = reg_read32(hcd->regs, HC_CHIP_ID_REG);
470 scratch = reg_read32(hcd->regs, HC_SCRATCH_REG);
472 dev_err(hcd->self.controller, "Scratch test failed.\n");
484 reg_write32(hcd->regs, HC_BUFFER_STATUS_REG, 0);
485 reg_write32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG, NO_TRANSFER_ACTIVE);
486 reg_write32(hcd->regs, HC_INT_PTD_SKIPMAP_REG, NO_TRANSFER_ACTIVE);
487 reg_write32(hcd->regs, HC_ISO_PTD_SKIPMAP_REG, NO_TRANSFER_ACTIVE);
489 result = ehci_reset(hcd);
496 hwmode = reg_read32(hcd->regs, HC_HW_MODE_CTRL) & ~ALL_ATX_RESET;
497 reg_write32(hcd->regs, HC_HW_MODE_CTRL, hwmode | ALL_ATX_RESET);
499 reg_write32(hcd->regs, HC_HW_MODE_CTRL, hwmode);
501 reg_write32(hcd->regs, HC_INTERRUPT_ENABLE, INTERRUPT_ENABLE_MASK);
503 priv->hcs_params = reg_read32(hcd->regs, HC_HCSPARAMS);
505 return priv_init(hcd);
667 static void isp1760_urb_done(struct usb_hcd *hcd, struct urb *urb)
671 struct isp1760_hcd *priv = hcd_to_priv(hcd);
687 usb_hcd_unlink_urb_from_ep(hcd, urb);
689 usb_hcd_giveback_urb(hcd, urb, urb->status);
717 static void start_bus_transfer(struct usb_hcd *hcd, u32 ptd_offset, int slot,
722 struct isp1760_hcd *priv = hcd_to_priv(hcd);
733 priv->atl_done_map |= reg_read32(hcd->regs,
737 priv->int_done_map |= reg_read32(hcd->regs,
747 ptd_write(hcd->regs, ptd_offset, slot, ptd);
750 skip_map = reg_read32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG);
752 reg_write32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG, skip_map);
754 skip_map = reg_read32(hcd->regs, HC_INT_PTD_SKIPMAP_REG);
756 reg_write32(hcd->regs, HC_INT_PTD_SKIPMAP_REG, skip_map);
766 static void collect_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh,
786 mem_reads8(hcd->regs, qtd->payload_addr,
808 free_mem(hcd, qtd);
829 static void enqueue_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh)
831 struct isp1760_hcd *priv = hcd_to_priv(hcd);
869 alloc_mem(hcd, qtd);
876 mem_writes8(hcd->regs, qtd->payload_addr,
886 dev_dbg(hcd->self.controller, "%s: No slot "
896 start_bus_transfer(hcd, ptd_offset, free_slot,
908 static void schedule_ptds(struct usb_hcd *hcd)
917 if (!hcd) {
922 priv = hcd_to_priv(hcd);
930 collect_qtds(hcd, qh, &urb_list);
938 isp1760_urb_done(hcd, urb_listitem->urb);
969 enqueue_qtds(hcd, qh);
977 static int check_int_transfer(struct usb_hcd *hcd, struct ptd *ptd,
996 dev_dbg(hcd->self.controller, "%s: underrun "
1002 dev_dbg(hcd->self.controller, "%s: transaction "
1009 dev_dbg(hcd->self.controller, "%s: babble "
1024 static int check_atl_transfer(struct usb_hcd *hcd, struct ptd *ptd,
1036 dev_dbg(hcd->self.controller, "%s: ptd error:\n"
1048 dev_dbg(hcd->self.controller, "PID error; reloading ptd\n");
1064 static void handle_done_ptds(struct usb_hcd *hcd)
1066 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1077 skip_map = reg_read32(hcd->regs, HC_INT_PTD_SKIPMAP_REG);
1079 skip_map = reg_read32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG);
1097 ptd_read(hcd->regs, INT_PTD_OFFSET, slot, &ptd);
1098 state = check_int_transfer(hcd, &ptd,
1112 ptd_read(hcd->regs, ATL_PTD_OFFSET, slot, &ptd);
1113 state = check_atl_transfer(hcd, &ptd,
1183 dev_err(hcd->self.controller,
1193 start_bus_transfer(hcd, ptd_offset, slot, slots, qtd,
1199 schedule_ptds(hcd);
1202 static irqreturn_t isp1760_irq(struct usb_hcd *hcd)
1204 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1210 if (!(hcd->state & HC_STATE_RUNNING))
1213 imask = reg_read32(hcd->regs, HC_INTERRUPT_REG);
1216 reg_write32(hcd->regs, HC_INTERRUPT_REG, imask); /* Clear */
1218 priv->int_done_map |= reg_read32(hcd->regs, HC_INT_PTD_DONEMAP_REG);
1219 priv->atl_done_map |= reg_read32(hcd->regs, HC_ATL_PTD_DONEMAP_REG);
1221 handle_done_ptds(hcd);
1262 struct usb_hcd *hcd = errata2_timer_hcd;
1263 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1274 ptd_read(hcd->regs, ATL_PTD_OFFSET, slot, &ptd);
1281 handle_done_ptds(hcd);
1289 static int isp1760_run(struct usb_hcd *hcd)
1296 hcd->uses_new_polling = 1;
1298 hcd->state = HC_STATE_RUNNING;
1301 reg_write32(hcd->regs, HC_ATL_IRQ_MASK_AND_REG, 0);
1302 reg_write32(hcd->regs, HC_ATL_IRQ_MASK_OR_REG, 0xffffffff);
1303 reg_write32(hcd->regs, HC_INT_IRQ_MASK_AND_REG, 0);
1304 reg_write32(hcd->regs, HC_INT_IRQ_MASK_OR_REG, 0xffffffff);
1305 reg_write32(hcd->regs, HC_ISO_IRQ_MASK_AND_REG, 0);
1306 reg_write32(hcd->regs, HC_ISO_IRQ_MASK_OR_REG, 0xffffffff);
1309 temp = reg_read32(hcd->regs, HC_HW_MODE_CTRL);
1310 reg_write32(hcd->regs, HC_HW_MODE_CTRL, temp | HW_GLOBAL_INTR_EN);
1312 command = reg_read32(hcd->regs, HC_USBCMD);
1315 reg_write32(hcd->regs, HC_USBCMD, command);
1317 retval = handshake(hcd, HC_USBCMD, CMD_RUN, CMD_RUN, 250 * 1000);
1327 reg_write32(hcd->regs, HC_CONFIGFLAG, FLAG_CF);
1329 retval = handshake(hcd, HC_CONFIGFLAG, FLAG_CF, FLAG_CF, 250 * 1000);
1334 errata2_timer_hcd = hcd;
1339 chipid = reg_read32(hcd->regs, HC_CHIP_ID_REG);
1340 dev_info(hcd->self.controller, "USB ISP %04x HW rev. %d started\n",
1346 reg_write32(hcd->regs, HC_ATL_PTD_LASTPTD_REG, 0x80000000);
1347 reg_write32(hcd->regs, HC_INT_PTD_LASTPTD_REG, 0x80000000);
1348 reg_write32(hcd->regs, HC_ISO_PTD_LASTPTD_REG, 0x00000001);
1349 reg_write32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG, 0xffffffff);
1350 reg_write32(hcd->regs, HC_INT_PTD_SKIPMAP_REG, 0xffffffff);
1351 reg_write32(hcd->regs, HC_ISO_PTD_SKIPMAP_REG, 0xffffffff);
1352 reg_write32(hcd->regs, HC_BUFFER_STATUS_REG,
1388 static void packetize_urb(struct usb_hcd *hcd,
1402 dev_err(hcd->self.controller,
1489 static int isp1760_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
1492 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1514 dev_err(hcd->self.controller, "%s: isochronous USB packets "
1519 dev_err(hcd->self.controller, "%s: unknown pipe type\n",
1527 packetize_urb(hcd, urb, &new_qtds, mem_flags);
1534 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) {
1539 retval = usb_hcd_link_urb_to_ep(hcd, urb);
1560 usb_hcd_unlink_urb_from_ep(hcd, urb);
1569 schedule_ptds(hcd);
1576 static void kill_transfer(struct usb_hcd *hcd, struct urb *urb,
1579 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1587 skip_map = reg_read32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG);
1589 reg_write32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG, skip_map);
1593 skip_map = reg_read32(hcd->regs, HC_INT_PTD_SKIPMAP_REG);
1595 reg_write32(hcd->regs, HC_INT_PTD_SKIPMAP_REG, skip_map);
1607 static void dequeue_urb_from_qtd(struct usb_hcd *hcd, struct isp1760_qh *qh,
1626 kill_transfer(hcd, urb, qh);
1638 static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
1641 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1648 retval = usb_hcd_check_unlink_urb(hcd, urb, status);
1660 dequeue_urb_from_qtd(hcd, qh, qtd);
1666 schedule_ptds(hcd);
1673 static void isp1760_endpoint_disable(struct usb_hcd *hcd,
1676 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1699 schedule_ptds(hcd);
1705 static int isp1760_hub_status_data(struct usb_hcd *hcd, char *buf)
1707 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1714 if (!HC_IS_RUNNING(hcd->state))
1722 temp = reg_read32(hcd->regs, HC_PORTSC1);
1727 reg_write32(hcd->regs, HC_PORTSC1, temp);
1784 static int check_reset_complete(struct usb_hcd *hcd, int index,
1793 dev_info(hcd->self.controller,
1799 reg_write32(hcd->regs, HC_PORTSC1, port_status);
1802 dev_info(hcd->self.controller, "port %d high speed\n",
1808 static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,
1811 struct isp1760_hcd *priv = hcd_to_priv(hcd);
1840 temp = reg_read32(hcd->regs, HC_PORTSC1);
1851 reg_write32(hcd->regs, HC_PORTSC1, temp & ~PORT_PE);
1865 reg_write32(hcd->regs, HC_PORTSC1,
1876 reg_write32(hcd->regs, HC_PORTSC1,
1880 reg_write32(hcd->regs, HC_PORTSC1, temp | PORT_CSC);
1891 reg_read32(hcd->regs, HC_USBCMD);
1906 temp = reg_read32(hcd->regs, HC_PORTSC1);
1915 dev_err(hcd->self.controller, "Port resume should be skipped.\n");
1923 mod_timer(&hcd->rh_timer, priv->reset_done);
1933 temp = reg_read32(hcd->regs, HC_PORTSC1);
1934 reg_write32(hcd->regs, HC_PORTSC1,
1936 retval = handshake(hcd, HC_PORTSC1,
1939 dev_err(hcd->self.controller,
1956 reg_write32(hcd->regs, HC_PORTSC1, temp & ~PORT_RESET);
1960 retval = handshake(hcd, HC_PORTSC1,
1963 dev_err(hcd->self.controller, "port %d reset error %d\n",
1969 temp = check_reset_complete(hcd, wIndex,
1970 reg_read32(hcd->regs, HC_PORTSC1));
1979 dev_err(hcd->self.controller, "PORT_OWNER is set\n");
2012 temp = reg_read32(hcd->regs, HC_PORTSC1);
2019 reg_write32(hcd->regs, HC_PORTSC1, temp | PORT_PE);
2027 reg_write32(hcd->regs, HC_PORTSC1, temp | PORT_SUSPEND);
2031 reg_write32(hcd->regs, HC_PORTSC1,
2055 reg_write32(hcd->regs, HC_PORTSC1, temp);
2060 reg_read32(hcd->regs, HC_USBCMD);
2072 static int isp1760_get_frame(struct usb_hcd *hcd)
2074 struct isp1760_hcd *priv = hcd_to_priv(hcd);
2077 fr = reg_read32(hcd->regs, HC_FRINDEX);
2081 static void isp1760_stop(struct usb_hcd *hcd)
2083 struct isp1760_hcd *priv = hcd_to_priv(hcd);
2088 isp1760_hub_control(hcd, ClearPortFeature, USB_PORT_FEAT_POWER, 1,
2093 ehci_reset(hcd);
2095 temp = reg_read32(hcd->regs, HC_HW_MODE_CTRL);
2096 reg_write32(hcd->regs, HC_HW_MODE_CTRL, temp &= ~HW_GLOBAL_INTR_EN);
2099 reg_write32(hcd->regs, HC_CONFIGFLAG, 0);
2102 static void isp1760_shutdown(struct usb_hcd *hcd)
2106 isp1760_stop(hcd);
2107 temp = reg_read32(hcd->regs, HC_HW_MODE_CTRL);
2108 reg_write32(hcd->regs, HC_HW_MODE_CTRL, temp &= ~HW_GLOBAL_INTR_EN);
2110 command = reg_read32(hcd->regs, HC_USBCMD);
2112 reg_write32(hcd->regs, HC_USBCMD, command);
2115 static void isp1760_clear_tt_buffer_complete(struct usb_hcd *hcd,
2118 struct isp1760_hcd *priv = hcd_to_priv(hcd);
2127 schedule_ptds(hcd);
2133 .description = "isp1760-hcd",
2189 struct usb_hcd *hcd;
2192 hcd = usb_create_hcd(&isp1760_hc_driver, dev, dev_name(dev));
2193 if (!hcd)
2196 *(struct isp1760_hcd **)hcd->hcd_priv = priv;
2198 priv->hcd = hcd;
2202 hcd->irq = irq;
2203 hcd->regs = regs;
2204 hcd->rsrc_start = mem->start;
2205 hcd->rsrc_len = resource_size(mem);
2208 hcd->cant_recv_wakeups = 1;
2210 ret = usb_add_hcd(hcd, irq, irqflags);
2214 device_wakeup_enable(hcd->self.controller);
2219 usb_put_hcd(hcd);
2225 if (!priv->hcd)
2228 usb_remove_hcd(priv->hcd);
2229 usb_put_hcd(priv->hcd);