Lines Matching refs:mod
291 static inline void ican3_set_page(struct ican3_dev *mod, unsigned int page)
294 iowrite8(page, &mod->dpmctrl->window_address);
304 * LOCKING: must hold mod->lock
308 static int ican3_old_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
314 ican3_set_page(mod, QUEUE_OLD_CONTROL);
315 peer = ioread8(mod->dpm + MSYNC_PEER);
316 locl = ioread8(mod->dpm + MSYNC_LOCL);
320 netdev_dbg(mod->ndev, "no mbox for reading\n");
332 ican3_set_page(mod, mbox_page);
333 memcpy_fromio(msg, mod->dpm, sizeof(*msg));
341 ican3_set_page(mod, QUEUE_OLD_CONTROL);
342 iowrite8(locl, mod->dpm + MSYNC_LOCL);
349 * LOCKING: must hold mod->lock
353 static int ican3_old_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
359 ican3_set_page(mod, QUEUE_OLD_CONTROL);
360 peer = ioread8(mod->dpm + MSYNC_PEER);
361 locl = ioread8(mod->dpm + MSYNC_LOCL);
365 netdev_err(mod->ndev, "no mbox for writing\n");
374 ican3_set_page(mod, mbox_page);
375 memcpy_toio(mod->dpm, msg, sizeof(*msg));
381 ican3_set_page(mod, QUEUE_OLD_CONTROL);
382 iowrite8(locl, mod->dpm + MSYNC_LOCL);
390 static void ican3_init_new_host_interface(struct ican3_dev *mod)
397 spin_lock_irqsave(&mod->lock, flags);
400 mod->rx_num = 0;
401 mod->rx_int = 0;
404 ican3_set_page(mod, QUEUE_TOHOST);
405 dst = mod->dpm;
410 desc.pointer = mod->free_page;
418 mod->free_page++;
422 ican3_set_page(mod, QUEUE_FROMHOST_MID);
423 dst = mod->dpm;
426 mod->tx_num = 0;
431 desc.pointer = mod->free_page;
439 mod->free_page++;
443 ican3_set_page(mod, QUEUE_FROMHOST_HIGH);
444 dst = mod->dpm;
448 desc.pointer = mod->free_page;
450 mod->free_page++;
453 ican3_set_page(mod, QUEUE_FROMHOST_LOW);
454 dst = mod->dpm;
458 desc.pointer = mod->free_page;
460 mod->free_page++;
462 spin_unlock_irqrestore(&mod->lock, flags);
469 static void ican3_init_fast_host_interface(struct ican3_dev *mod)
477 spin_lock_irqsave(&mod->lock, flags);
480 mod->fastrx_start = mod->free_page;
481 mod->fastrx_num = 0;
497 ican3_set_page(mod, mod->free_page);
500 dst = mod->dpm + addr;
507 mod->free_page++;
513 mod->free_page++;
516 mod->fasttx_start = mod->free_page;
517 mod->fasttx_num = 0;
533 ican3_set_page(mod, mod->free_page);
536 dst = mod->dpm + addr;
543 mod->free_page++;
547 spin_unlock_irqrestore(&mod->lock, flags);
555 * LOCKING: must hold mod->lock
557 static int ican3_new_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
560 void __iomem *desc_addr = mod->dpm + (mod->tx_num * sizeof(desc));
563 ican3_set_page(mod, QUEUE_FROMHOST_MID);
567 netdev_dbg(mod->ndev, "%s: no free buffers\n", __func__);
572 ican3_set_page(mod, desc.pointer);
573 memcpy_toio(mod->dpm, msg, sizeof(*msg));
576 ican3_set_page(mod, QUEUE_FROMHOST_MID);
581 mod->tx_num = (desc.control & DESC_WRAP) ? 0 : (mod->tx_num + 1);
586 * LOCKING: must hold mod->lock
588 static int ican3_new_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
591 void __iomem *desc_addr = mod->dpm + (mod->rx_num * sizeof(desc));
594 ican3_set_page(mod, QUEUE_TOHOST);
598 netdev_dbg(mod->ndev, "%s: no buffers to recv\n", __func__);
603 ican3_set_page(mod, desc.pointer);
604 memcpy_fromio(msg, mod->dpm, sizeof(*msg));
607 ican3_set_page(mod, QUEUE_TOHOST);
612 mod->rx_num = (desc.control & DESC_WRAP) ? 0 : (mod->rx_num + 1);
620 static int ican3_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
625 spin_lock_irqsave(&mod->lock, flags);
627 if (mod->iftype == 0)
628 ret = ican3_old_send_msg(mod, msg);
630 ret = ican3_new_send_msg(mod, msg);
632 spin_unlock_irqrestore(&mod->lock, flags);
636 static int ican3_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
641 spin_lock_irqsave(&mod->lock, flags);
643 if (mod->iftype == 0)
644 ret = ican3_old_recv_msg(mod, msg);
646 ret = ican3_new_recv_msg(mod, msg);
648 spin_unlock_irqrestore(&mod->lock, flags);
656 static int ican3_msg_connect(struct ican3_dev *mod)
664 return ican3_send_msg(mod, &msg);
667 static int ican3_msg_disconnect(struct ican3_dev *mod)
675 return ican3_send_msg(mod, &msg);
678 static int ican3_msg_newhostif(struct ican3_dev *mod)
688 WARN_ON(mod->iftype != 0);
690 ret = ican3_send_msg(mod, &msg);
695 mod->iftype = 1;
699 static int ican3_msg_fasthostif(struct ican3_dev *mod)
709 addr = DPM_PAGE_ADDR(mod->fastrx_start);
716 addr = DPM_PAGE_ADDR(mod->fasttx_start);
723 WARN_ON(mod->iftype != 1);
725 return ican3_send_msg(mod, &msg);
732 static int ican3_set_id_filter(struct ican3_dev *mod, bool accept)
749 ret = ican3_send_msg(mod, &msg);
770 return ican3_send_msg(mod, &msg);
776 static int ican3_set_bus_state(struct ican3_dev *mod, bool on)
778 struct can_bittiming *bt = &mod->can.bittiming;
789 if (mod->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
792 if (mod->fwtype == ICAN3_FWTYPE_ICANOS) {
803 res = ican3_send_msg(mod, &msg);
813 return ican3_send_msg(mod, &msg);
815 } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) {
830 res = ican3_send_msg(mod, &msg);
848 return ican3_send_msg(mod, &msg);
855 static int ican3_set_termination(struct ican3_dev *mod, bool on)
865 return ican3_send_msg(mod, &msg);
868 static int ican3_send_inquiry(struct ican3_dev *mod, u8 subspec)
878 return ican3_send_msg(mod, &msg);
881 static int ican3_set_buserror(struct ican3_dev *mod, u8 quota)
885 if (mod->fwtype == ICAN3_FWTYPE_ICANOS) {
891 } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) {
902 return ican3_send_msg(mod, &msg);
909 static void ican3_to_can_frame(struct ican3_dev *mod,
941 static void can_frame_to_ican3(struct ican3_dev *mod,
954 if (mod->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
985 static void ican3_handle_idvers(struct ican3_dev *mod, struct ican3_msg *msg)
987 netdev_dbg(mod->ndev, "IDVERS response: %s\n", msg->data);
990 static void ican3_handle_msglost(struct ican3_dev *mod, struct ican3_msg *msg)
992 struct net_device *dev = mod->ndev;
1003 netdev_err(mod->ndev, "lost %d control messages\n", msg->data[0]);
1032 static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
1034 struct net_device *dev = mod->ndev;
1036 enum can_state state = mod->can.state;
1043 netdev_err(mod->ndev, "unable to handle errors on non-SJA1000\n");
1049 netdev_err(mod->ndev, "error message too short\n");
1071 netdev_dbg(mod->ndev, "bus error interrupt\n");
1075 kfree_skb(skb_dequeue(&mod->echoq));
1085 ret = ican3_set_buserror(mod, 1);
1087 netdev_err(mod->ndev, "unable to re-enable bus-error\n");
1092 if (!(mod->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING))
1102 netdev_dbg(mod->ndev, "data overrun interrupt\n");
1111 netdev_dbg(mod->ndev, "error warning + passive interrupt\n");
1115 mod->can.can_stats.bus_off++;
1129 mod->can.can_stats.bus_error++;
1154 if (state != mod->can.state && (state == CAN_STATE_ERROR_WARNING ||
1158 mod->can.can_stats.error_warning++;
1163 mod->can.can_stats.error_passive++;
1173 mod->can.state = state;
1178 static void ican3_handle_inquiry(struct ican3_dev *mod, struct ican3_msg *msg)
1183 mod->bec.rxerr = msg->data[5];
1184 mod->bec.txerr = msg->data[6];
1185 complete(&mod->buserror_comp);
1188 mod->termination_enabled = msg->data[6] & HWCONF_TERMINATE_ON;
1189 complete(&mod->termination_comp);
1192 netdev_err(mod->ndev, "received an unknown inquiry response\n");
1198 static void ican3_handle_nmtsind(struct ican3_dev *mod, struct ican3_msg *msg)
1212 ican3_handle_cevtind(mod, msg);
1219 netdev_warn(mod->ndev, "unknown NMTS event indication %x\n",
1226 netdev_warn(mod->ndev, "unhandled NMTS indication %x\n",
1232 static void ican3_handle_unknown_message(struct ican3_dev *mod,
1235 netdev_warn(mod->ndev, "received unknown message: spec 0x%.2x length %d\n",
1242 static void ican3_handle_message(struct ican3_dev *mod, struct ican3_msg *msg)
1244 netdev_dbg(mod->ndev, "%s: modno %d spec 0x%.2x len %d bytes\n", __func__,
1245 mod->num, msg->spec, le16_to_cpu(msg->len));
1249 ican3_handle_idvers(mod, msg);
1253 ican3_handle_msglost(mod, msg);
1256 ican3_handle_cevtind(mod, msg);
1259 ican3_handle_inquiry(mod, msg);
1262 ican3_handle_nmtsind(mod, msg);
1265 ican3_handle_unknown_message(mod, msg);
1274 static void ican3_put_echo_skb(struct ican3_dev *mod, struct sk_buff *skb)
1281 skb_queue_tail(&mod->echoq, skb);
1284 static unsigned int ican3_get_echo_skb(struct ican3_dev *mod)
1286 struct sk_buff *skb = skb_dequeue(&mod->echoq);
1292 netdev_err(mod->ndev, "BUG: echo skb not occupied\n");
1308 skb->dev = mod->ndev;
1322 static bool ican3_echo_skb_matches(struct ican3_dev *mod, struct sk_buff *skb)
1325 struct sk_buff *echo_skb = skb_peek(&mod->echoq);
1344 * LOCKING: must hold mod->lock
1346 static bool ican3_txok(struct ican3_dev *mod)
1352 if (skb_queue_len(&mod->echoq) >= ICAN3_TX_BUFFERS)
1356 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16));
1357 desc = mod->dpm + ((mod->fasttx_num % 16) * sizeof(*desc));
1372 static int ican3_recv_skb(struct ican3_dev *mod)
1374 struct net_device *ndev = mod->ndev;
1382 spin_lock_irqsave(&mod->lock, flags);
1385 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16));
1386 desc_addr = mod->dpm + ((mod->fastrx_num % 16) * sizeof(desc));
1389 spin_unlock_irqrestore(&mod->lock, flags);
1403 ican3_to_can_frame(mod, &desc, cf);
1415 if (ican3_echo_skb_matches(mod, skb)) {
1417 stats->tx_bytes += ican3_get_echo_skb(mod);
1431 spin_lock_irqsave(&mod->lock, flags);
1433 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16));
1437 mod->fastrx_num = (desc.control & DESC_WRAP) ? 0
1438 : (mod->fastrx_num + 1);
1441 spin_unlock_irqrestore(&mod->lock, flags);
1447 struct ican3_dev *mod = container_of(napi, struct ican3_dev, napi);
1455 ret = ican3_recv_msg(mod, &msg);
1459 ican3_handle_message(mod, &msg);
1464 ret = ican3_recv_skb(mod);
1476 spin_lock_irqsave(&mod->lock, flags);
1479 if (netif_queue_stopped(mod->ndev) && ican3_txok(mod))
1480 netif_wake_queue(mod->ndev);
1482 spin_unlock_irqrestore(&mod->lock, flags);
1485 iowrite8(1 << mod->num, &mod->ctrl->int_enable);
1491 struct ican3_dev *mod = dev_id;
1498 stat = ioread8(&mod->ctrl->int_disable) & (1 << mod->num);
1499 if (stat == (1 << mod->num))
1503 ioread8(&mod->dpmctrl->interrupt);
1506 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1507 napi_schedule(&mod->napi);
1520 static int ican3_reset_module(struct ican3_dev *mod)
1526 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1529 mod->free_page = DPM_FREE_START;
1531 ican3_set_page(mod, QUEUE_OLD_CONTROL);
1532 runold = ioread8(mod->dpm + TARGET_RUNNING);
1535 iowrite8(0x00, &mod->dpmctrl->hwreset);
1540 ican3_set_page(mod, QUEUE_OLD_CONTROL);
1541 runnew = ioread8(mod->dpm + TARGET_RUNNING);
1548 netdev_err(mod->ndev, "failed to reset CAN module\n");
1552 static void ican3_shutdown_module(struct ican3_dev *mod)
1554 ican3_msg_disconnect(mod);
1555 ican3_reset_module(mod);
1561 static int ican3_startup_module(struct ican3_dev *mod)
1565 ret = ican3_reset_module(mod);
1567 netdev_err(mod->ndev, "unable to reset module\n");
1572 memcpy_fromio(mod->fwinfo, mod->dpm + FIRMWARE_STAMP, sizeof(mod->fwinfo) - 1);
1573 if (strncmp(mod->fwinfo, "JANZ-ICAN3", 10)) {
1574 netdev_err(mod->ndev, "ICAN3 not detected (found %s)\n", mod->fwinfo);
1577 if (strstr(mod->fwinfo, "CAL/CANopen"))
1578 mod->fwtype = ICAN3_FWTYPE_CAL_CANOPEN;
1580 mod->fwtype = ICAN3_FWTYPE_ICANOS;
1583 iowrite8(1 << mod->num, &mod->ctrl->int_enable);
1585 ret = ican3_msg_connect(mod);
1587 netdev_err(mod->ndev, "unable to connect to module\n");
1591 ican3_init_new_host_interface(mod);
1592 ret = ican3_msg_newhostif(mod);
1594 netdev_err(mod->ndev, "unable to switch to new-style interface\n");
1599 ret = ican3_set_termination(mod, true);
1601 netdev_err(mod->ndev, "unable to enable termination\n");
1606 ret = ican3_set_buserror(mod, 1);
1608 netdev_err(mod->ndev, "unable to set bus-error\n");
1612 ican3_init_fast_host_interface(mod);
1613 ret = ican3_msg_fasthostif(mod);
1615 netdev_err(mod->ndev, "unable to switch to fast host interface\n");
1619 ret = ican3_set_id_filter(mod, true);
1621 netdev_err(mod->ndev, "unable to set acceptance filter\n");
1634 struct ican3_dev *mod = netdev_priv(ndev);
1640 netdev_err(mod->ndev, "unable to start CAN layer\n");
1645 ret = ican3_set_bus_state(mod, true);
1647 netdev_err(mod->ndev, "unable to set bus-on\n");
1653 mod->can.state = CAN_STATE_ERROR_ACTIVE;
1661 struct ican3_dev *mod = netdev_priv(ndev);
1666 mod->can.state = CAN_STATE_STOPPED;
1669 ret = ican3_set_bus_state(mod, false);
1671 netdev_err(mod->ndev, "unable to set bus-off\n");
1676 skb_queue_purge(&mod->echoq);
1685 struct ican3_dev *mod = netdev_priv(ndev);
1694 spin_lock_irqsave(&mod->lock, flags);
1697 if (!ican3_txok(mod)) {
1698 netdev_err(mod->ndev, "BUG: no free descriptors\n");
1699 spin_unlock_irqrestore(&mod->lock, flags);
1704 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16));
1705 desc_addr = mod->dpm + ((mod->fasttx_num % 16) * sizeof(desc));
1710 can_frame_to_ican3(mod, cf, &desc);
1718 ican3_put_echo_skb(mod, skb);
1729 iowrite8(0x01, &mod->dpmctrl->interrupt);
1735 mod->fasttx_num = (desc.control & DESC_WRAP) ? 0
1736 : (mod->fasttx_num + 1);
1739 if (!ican3_txok(mod))
1742 spin_unlock_irqrestore(&mod->lock, flags);
1772 struct ican3_dev *mod = netdev_priv(ndev);
1779 ret = ican3_set_bus_state(mod, true);
1786 mod->can.state = CAN_STATE_ERROR_ACTIVE;
1797 struct ican3_dev *mod = netdev_priv(ndev);
1800 ret = ican3_send_inquiry(mod, INQUIRY_STATUS);
1804 if (!wait_for_completion_timeout(&mod->buserror_comp, HZ)) {
1805 netdev_info(mod->ndev, "%s timed out\n", __func__);
1809 bec->rxerr = mod->bec.rxerr;
1810 bec->txerr = mod->bec.txerr;
1822 struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1825 ret = ican3_send_inquiry(mod, INQUIRY_TERMINATION);
1829 if (!wait_for_completion_timeout(&mod->termination_comp, HZ)) {
1830 netdev_info(mod->ndev, "%s timed out\n", __func__);
1834 return snprintf(buf, PAGE_SIZE, "%u\n", mod->termination_enabled);
1841 struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1848 ret = ican3_set_termination(mod, enable);
1859 struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1861 return scnprintf(buf, PAGE_SIZE, "%s\n", mod->fwinfo);
1886 struct ican3_dev *mod;
1901 ndev = alloc_candev(sizeof(*mod), 0);
1909 mod = netdev_priv(ndev);
1910 mod->ndev = ndev;
1911 mod->num = pdata->modno;
1912 netif_napi_add(ndev, &mod->napi, ican3_napi, ICAN3_RX_BUFFERS);
1913 skb_queue_head_init(&mod->echoq);
1914 spin_lock_init(&mod->lock);
1915 init_completion(&mod->termination_comp);
1916 init_completion(&mod->buserror_comp);
1922 mod->free_page = DPM_FREE_START;
1928 mod->can.clock.freq = ICAN3_CAN_CLOCK;
1929 mod->can.bittiming_const = &ican3_bittiming_const;
1930 mod->can.do_set_mode = ican3_set_mode;
1931 mod->can.do_get_berr_counter = ican3_get_berr_counter;
1932 mod->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES
1937 mod->irq = platform_get_irq(pdev, 0);
1938 if (mod->irq < 0) {
1943 ndev->irq = mod->irq;
1953 mod->dpm = ioremap(res->start, resource_size(res));
1954 if (!mod->dpm) {
1960 mod->dpmctrl = mod->dpm + DPM_PAGE_SIZE;
1970 mod->ctrl = ioremap(res->start, resource_size(res));
1971 if (!mod->ctrl) {
1978 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1979 ret = request_irq(mod->irq, ican3_irq, IRQF_SHARED, DRV_NAME, mod);
1986 napi_enable(&mod->napi);
1987 ret = ican3_startup_module(mod);
2000 netdev_info(mod->ndev, "module %d: registered CAN device\n", pdata->modno);
2004 napi_disable(&mod->napi);
2005 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
2006 free_irq(mod->irq, mod);
2008 iounmap(mod->ctrl);
2010 iounmap(mod->dpm);
2020 struct ican3_dev *mod = netdev_priv(ndev);
2024 napi_disable(&mod->napi);
2025 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
2026 free_irq(mod->irq, mod);
2029 ican3_shutdown_module(mod);
2032 iounmap(mod->ctrl);
2033 iounmap(mod->dpm);