Lines Matching refs:mod

292 static inline void ican3_set_page(struct ican3_dev *mod, unsigned int page)
295 iowrite8(page, &mod->dpmctrl->window_address);
305 * LOCKING: must hold mod->lock
309 static int ican3_old_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
315 ican3_set_page(mod, QUEUE_OLD_CONTROL);
316 peer = ioread8(mod->dpm + MSYNC_PEER);
317 locl = ioread8(mod->dpm + MSYNC_LOCL);
321 netdev_dbg(mod->ndev, "no mbox for reading\n");
333 ican3_set_page(mod, mbox_page);
334 memcpy_fromio(msg, mod->dpm, sizeof(*msg));
342 ican3_set_page(mod, QUEUE_OLD_CONTROL);
343 iowrite8(locl, mod->dpm + MSYNC_LOCL);
350 * LOCKING: must hold mod->lock
354 static int ican3_old_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
360 ican3_set_page(mod, QUEUE_OLD_CONTROL);
361 peer = ioread8(mod->dpm + MSYNC_PEER);
362 locl = ioread8(mod->dpm + MSYNC_LOCL);
366 netdev_err(mod->ndev, "no mbox for writing\n");
375 ican3_set_page(mod, mbox_page);
376 memcpy_toio(mod->dpm, msg, sizeof(*msg));
382 ican3_set_page(mod, QUEUE_OLD_CONTROL);
383 iowrite8(locl, mod->dpm + MSYNC_LOCL);
391 static void ican3_init_new_host_interface(struct ican3_dev *mod)
398 spin_lock_irqsave(&mod->lock, flags);
401 mod->rx_num = 0;
402 mod->rx_int = 0;
405 ican3_set_page(mod, QUEUE_TOHOST);
406 dst = mod->dpm;
411 desc.pointer = mod->free_page;
419 mod->free_page++;
423 ican3_set_page(mod, QUEUE_FROMHOST_MID);
424 dst = mod->dpm;
427 mod->tx_num = 0;
432 desc.pointer = mod->free_page;
440 mod->free_page++;
444 ican3_set_page(mod, QUEUE_FROMHOST_HIGH);
445 dst = mod->dpm;
449 desc.pointer = mod->free_page;
451 mod->free_page++;
454 ican3_set_page(mod, QUEUE_FROMHOST_LOW);
455 dst = mod->dpm;
459 desc.pointer = mod->free_page;
461 mod->free_page++;
463 spin_unlock_irqrestore(&mod->lock, flags);
470 static void ican3_init_fast_host_interface(struct ican3_dev *mod)
478 spin_lock_irqsave(&mod->lock, flags);
481 mod->fastrx_start = mod->free_page;
482 mod->fastrx_num = 0;
498 ican3_set_page(mod, mod->free_page);
501 dst = mod->dpm + addr;
508 mod->free_page++;
514 mod->free_page++;
517 mod->fasttx_start = mod->free_page;
518 mod->fasttx_num = 0;
534 ican3_set_page(mod, mod->free_page);
537 dst = mod->dpm + addr;
544 mod->free_page++;
548 spin_unlock_irqrestore(&mod->lock, flags);
556 * LOCKING: must hold mod->lock
558 static int ican3_new_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
561 void __iomem *desc_addr = mod->dpm + (mod->tx_num * sizeof(desc));
564 ican3_set_page(mod, QUEUE_FROMHOST_MID);
568 netdev_dbg(mod->ndev, "%s: no free buffers\n", __func__);
573 ican3_set_page(mod, desc.pointer);
574 memcpy_toio(mod->dpm, msg, sizeof(*msg));
577 ican3_set_page(mod, QUEUE_FROMHOST_MID);
582 mod->tx_num = (desc.control & DESC_WRAP) ? 0 : (mod->tx_num + 1);
587 * LOCKING: must hold mod->lock
589 static int ican3_new_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
592 void __iomem *desc_addr = mod->dpm + (mod->rx_num * sizeof(desc));
595 ican3_set_page(mod, QUEUE_TOHOST);
599 netdev_dbg(mod->ndev, "%s: no buffers to recv\n", __func__);
604 ican3_set_page(mod, desc.pointer);
605 memcpy_fromio(msg, mod->dpm, sizeof(*msg));
608 ican3_set_page(mod, QUEUE_TOHOST);
613 mod->rx_num = (desc.control & DESC_WRAP) ? 0 : (mod->rx_num + 1);
621 static int ican3_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
626 spin_lock_irqsave(&mod->lock, flags);
628 if (mod->iftype == 0)
629 ret = ican3_old_send_msg(mod, msg);
631 ret = ican3_new_send_msg(mod, msg);
633 spin_unlock_irqrestore(&mod->lock, flags);
637 static int ican3_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
642 spin_lock_irqsave(&mod->lock, flags);
644 if (mod->iftype == 0)
645 ret = ican3_old_recv_msg(mod, msg);
647 ret = ican3_new_recv_msg(mod, msg);
649 spin_unlock_irqrestore(&mod->lock, flags);
657 static int ican3_msg_connect(struct ican3_dev *mod)
665 return ican3_send_msg(mod, &msg);
668 static int ican3_msg_disconnect(struct ican3_dev *mod)
676 return ican3_send_msg(mod, &msg);
679 static int ican3_msg_newhostif(struct ican3_dev *mod)
689 WARN_ON(mod->iftype != 0);
691 ret = ican3_send_msg(mod, &msg);
696 mod->iftype = 1;
700 static int ican3_msg_fasthostif(struct ican3_dev *mod)
710 addr = DPM_PAGE_ADDR(mod->fastrx_start);
717 addr = DPM_PAGE_ADDR(mod->fasttx_start);
724 WARN_ON(mod->iftype != 1);
726 return ican3_send_msg(mod, &msg);
733 static int ican3_set_id_filter(struct ican3_dev *mod, bool accept)
750 ret = ican3_send_msg(mod, &msg);
771 return ican3_send_msg(mod, &msg);
777 static int ican3_set_bus_state(struct ican3_dev *mod, bool on)
779 struct can_bittiming *bt = &mod->can.bittiming;
790 if (mod->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
793 if (mod->fwtype == ICAN3_FWTYPE_ICANOS) {
804 res = ican3_send_msg(mod, &msg);
814 return ican3_send_msg(mod, &msg);
816 } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) {
831 res = ican3_send_msg(mod, &msg);
849 return ican3_send_msg(mod, &msg);
856 static int ican3_set_termination(struct ican3_dev *mod, bool on)
866 return ican3_send_msg(mod, &msg);
869 static int ican3_send_inquiry(struct ican3_dev *mod, u8 subspec)
879 return ican3_send_msg(mod, &msg);
882 static int ican3_set_buserror(struct ican3_dev *mod, u8 quota)
886 if (mod->fwtype == ICAN3_FWTYPE_ICANOS) {
892 } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) {
903 return ican3_send_msg(mod, &msg);
910 static void ican3_to_can_frame(struct ican3_dev *mod,
942 static void can_frame_to_ican3(struct ican3_dev *mod,
955 if (mod->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
986 static void ican3_handle_idvers(struct ican3_dev *mod, struct ican3_msg *msg)
988 netdev_dbg(mod->ndev, "IDVERS response: %s\n", msg->data);
991 static void ican3_handle_msglost(struct ican3_dev *mod, struct ican3_msg *msg)
993 struct net_device *dev = mod->ndev;
1004 netdev_err(mod->ndev, "lost %d control messages\n", msg->data[0]);
1033 static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
1035 struct net_device *dev = mod->ndev;
1037 enum can_state state = mod->can.state;
1044 netdev_err(mod->ndev, "unable to handle errors on non-SJA1000\n");
1050 netdev_err(mod->ndev, "error message too short\n");
1072 netdev_dbg(mod->ndev, "bus error interrupt\n");
1076 kfree_skb(skb_dequeue(&mod->echoq));
1086 ret = ican3_set_buserror(mod, 1);
1088 netdev_err(mod->ndev, "unable to re-enable bus-error\n");
1093 if (!(mod->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING))
1103 netdev_dbg(mod->ndev, "data overrun interrupt\n");
1112 netdev_dbg(mod->ndev, "error warning + passive interrupt\n");
1116 mod->can.can_stats.bus_off++;
1130 mod->can.can_stats.bus_error++;
1155 if (state != mod->can.state && (state == CAN_STATE_ERROR_WARNING ||
1159 mod->can.can_stats.error_warning++;
1164 mod->can.can_stats.error_passive++;
1174 mod->can.state = state;
1179 static void ican3_handle_inquiry(struct ican3_dev *mod, struct ican3_msg *msg)
1184 mod->bec.rxerr = msg->data[5];
1185 mod->bec.txerr = msg->data[6];
1186 complete(&mod->buserror_comp);
1189 mod->termination_enabled = msg->data[6] & HWCONF_TERMINATE_ON;
1190 complete(&mod->termination_comp);
1193 netdev_err(mod->ndev, "received an unknown inquiry response\n");
1199 static void ican3_handle_nmtsind(struct ican3_dev *mod, struct ican3_msg *msg)
1213 ican3_handle_cevtind(mod, msg);
1220 netdev_warn(mod->ndev, "unknown NMTS event indication %x\n",
1227 netdev_warn(mod->ndev, "unhandled NMTS indication %x\n",
1233 static void ican3_handle_unknown_message(struct ican3_dev *mod,
1236 netdev_warn(mod->ndev, "received unknown message: spec 0x%.2x length %d\n",
1243 static void ican3_handle_message(struct ican3_dev *mod, struct ican3_msg *msg)
1245 netdev_dbg(mod->ndev, "%s: modno %d spec 0x%.2x len %d bytes\n", __func__,
1246 mod->num, msg->spec, le16_to_cpu(msg->len));
1250 ican3_handle_idvers(mod, msg);
1254 ican3_handle_msglost(mod, msg);
1257 ican3_handle_cevtind(mod, msg);
1260 ican3_handle_inquiry(mod, msg);
1263 ican3_handle_nmtsind(mod, msg);
1266 ican3_handle_unknown_message(mod, msg);
1275 static void ican3_put_echo_skb(struct ican3_dev *mod, struct sk_buff *skb)
1284 skb_queue_tail(&mod->echoq, skb);
1287 static unsigned int ican3_get_echo_skb(struct ican3_dev *mod)
1289 struct sk_buff *skb = skb_dequeue(&mod->echoq);
1295 netdev_err(mod->ndev, "BUG: echo skb not occupied\n");
1312 skb->dev = mod->ndev;
1326 static bool ican3_echo_skb_matches(struct ican3_dev *mod, struct sk_buff *skb)
1329 struct sk_buff *echo_skb = skb_peek(&mod->echoq);
1348 * LOCKING: must hold mod->lock
1350 static bool ican3_txok(struct ican3_dev *mod)
1356 if (skb_queue_len(&mod->echoq) >= ICAN3_TX_BUFFERS)
1360 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16));
1361 desc = mod->dpm + ((mod->fasttx_num % 16) * sizeof(*desc));
1376 static int ican3_recv_skb(struct ican3_dev *mod)
1378 struct net_device *ndev = mod->ndev;
1386 spin_lock_irqsave(&mod->lock, flags);
1389 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16));
1390 desc_addr = mod->dpm + ((mod->fastrx_num % 16) * sizeof(desc));
1393 spin_unlock_irqrestore(&mod->lock, flags);
1407 ican3_to_can_frame(mod, &desc, cf);
1419 if (ican3_echo_skb_matches(mod, skb)) {
1421 stats->tx_bytes += ican3_get_echo_skb(mod);
1436 spin_lock_irqsave(&mod->lock, flags);
1438 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16));
1442 mod->fastrx_num = (desc.control & DESC_WRAP) ? 0
1443 : (mod->fastrx_num + 1);
1446 spin_unlock_irqrestore(&mod->lock, flags);
1452 struct ican3_dev *mod = container_of(napi, struct ican3_dev, napi);
1460 ret = ican3_recv_msg(mod, &msg);
1464 ican3_handle_message(mod, &msg);
1469 ret = ican3_recv_skb(mod);
1481 spin_lock_irqsave(&mod->lock, flags);
1484 if (netif_queue_stopped(mod->ndev) && ican3_txok(mod))
1485 netif_wake_queue(mod->ndev);
1487 spin_unlock_irqrestore(&mod->lock, flags);
1490 iowrite8(1 << mod->num, &mod->ctrl->int_enable);
1496 struct ican3_dev *mod = dev_id;
1503 stat = ioread8(&mod->ctrl->int_disable) & (1 << mod->num);
1504 if (stat == (1 << mod->num))
1508 ioread8(&mod->dpmctrl->interrupt);
1511 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1512 napi_schedule(&mod->napi);
1525 static int ican3_reset_module(struct ican3_dev *mod)
1531 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1534 mod->free_page = DPM_FREE_START;
1536 ican3_set_page(mod, QUEUE_OLD_CONTROL);
1537 runold = ioread8(mod->dpm + TARGET_RUNNING);
1540 iowrite8(0x00, &mod->dpmctrl->hwreset);
1545 ican3_set_page(mod, QUEUE_OLD_CONTROL);
1546 runnew = ioread8(mod->dpm + TARGET_RUNNING);
1553 netdev_err(mod->ndev, "failed to reset CAN module\n");
1557 static void ican3_shutdown_module(struct ican3_dev *mod)
1559 ican3_msg_disconnect(mod);
1560 ican3_reset_module(mod);
1566 static int ican3_startup_module(struct ican3_dev *mod)
1570 ret = ican3_reset_module(mod);
1572 netdev_err(mod->ndev, "unable to reset module\n");
1577 memcpy_fromio(mod->fwinfo, mod->dpm + FIRMWARE_STAMP, sizeof(mod->fwinfo) - 1);
1578 if (strncmp(mod->fwinfo, "JANZ-ICAN3", 10)) {
1579 netdev_err(mod->ndev, "ICAN3 not detected (found %s)\n", mod->fwinfo);
1582 if (strstr(mod->fwinfo, "CAL/CANopen"))
1583 mod->fwtype = ICAN3_FWTYPE_CAL_CANOPEN;
1585 mod->fwtype = ICAN3_FWTYPE_ICANOS;
1588 iowrite8(1 << mod->num, &mod->ctrl->int_enable);
1590 ret = ican3_msg_connect(mod);
1592 netdev_err(mod->ndev, "unable to connect to module\n");
1596 ican3_init_new_host_interface(mod);
1597 ret = ican3_msg_newhostif(mod);
1599 netdev_err(mod->ndev, "unable to switch to new-style interface\n");
1604 ret = ican3_set_termination(mod, true);
1606 netdev_err(mod->ndev, "unable to enable termination\n");
1611 ret = ican3_set_buserror(mod, 1);
1613 netdev_err(mod->ndev, "unable to set bus-error\n");
1617 ican3_init_fast_host_interface(mod);
1618 ret = ican3_msg_fasthostif(mod);
1620 netdev_err(mod->ndev, "unable to switch to fast host interface\n");
1624 ret = ican3_set_id_filter(mod, true);
1626 netdev_err(mod->ndev, "unable to set acceptance filter\n");
1639 struct ican3_dev *mod = netdev_priv(ndev);
1645 netdev_err(mod->ndev, "unable to start CAN layer\n");
1650 ret = ican3_set_bus_state(mod, true);
1652 netdev_err(mod->ndev, "unable to set bus-on\n");
1658 mod->can.state = CAN_STATE_ERROR_ACTIVE;
1666 struct ican3_dev *mod = netdev_priv(ndev);
1671 mod->can.state = CAN_STATE_STOPPED;
1674 ret = ican3_set_bus_state(mod, false);
1676 netdev_err(mod->ndev, "unable to set bus-off\n");
1681 skb_queue_purge(&mod->echoq);
1690 struct ican3_dev *mod = netdev_priv(ndev);
1699 spin_lock_irqsave(&mod->lock, flags);
1702 if (!ican3_txok(mod)) {
1703 netdev_err(mod->ndev, "BUG: no free descriptors\n");
1704 spin_unlock_irqrestore(&mod->lock, flags);
1709 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16));
1710 desc_addr = mod->dpm + ((mod->fasttx_num % 16) * sizeof(desc));
1715 can_frame_to_ican3(mod, cf, &desc);
1723 ican3_put_echo_skb(mod, skb);
1734 iowrite8(0x01, &mod->dpmctrl->interrupt);
1740 mod->fasttx_num = (desc.control & DESC_WRAP) ? 0
1741 : (mod->fasttx_num + 1);
1744 if (!ican3_txok(mod))
1747 spin_unlock_irqrestore(&mod->lock, flags);
1781 struct ican3_dev *mod = netdev_priv(ndev);
1788 ret = ican3_set_bus_state(mod, true);
1795 mod->can.state = CAN_STATE_ERROR_ACTIVE;
1806 struct ican3_dev *mod = netdev_priv(ndev);
1809 ret = ican3_send_inquiry(mod, INQUIRY_STATUS);
1813 if (!wait_for_completion_timeout(&mod->buserror_comp, HZ)) {
1814 netdev_info(mod->ndev, "%s timed out\n", __func__);
1818 bec->rxerr = mod->bec.rxerr;
1819 bec->txerr = mod->bec.txerr;
1831 struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1834 ret = ican3_send_inquiry(mod, INQUIRY_TERMINATION);
1838 if (!wait_for_completion_timeout(&mod->termination_comp, HZ)) {
1839 netdev_info(mod->ndev, "%s timed out\n", __func__);
1843 return sysfs_emit(buf, "%u\n", mod->termination_enabled);
1850 struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1857 ret = ican3_set_termination(mod, enable);
1868 struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1870 return scnprintf(buf, PAGE_SIZE, "%s\n", mod->fwinfo);
1894 struct ican3_dev *mod;
1909 ndev = alloc_candev(sizeof(*mod), 0);
1917 mod = netdev_priv(ndev);
1918 mod->ndev = ndev;
1919 mod->num = pdata->modno;
1920 netif_napi_add_weight(ndev, &mod->napi, ican3_napi, ICAN3_RX_BUFFERS);
1921 skb_queue_head_init(&mod->echoq);
1922 spin_lock_init(&mod->lock);
1923 init_completion(&mod->termination_comp);
1924 init_completion(&mod->buserror_comp);
1930 mod->free_page = DPM_FREE_START;
1937 mod->can.clock.freq = ICAN3_CAN_CLOCK;
1938 mod->can.bittiming_const = &ican3_bittiming_const;
1939 mod->can.do_set_mode = ican3_set_mode;
1940 mod->can.do_get_berr_counter = ican3_get_berr_counter;
1941 mod->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES
1946 mod->irq = platform_get_irq(pdev, 0);
1947 if (mod->irq < 0) {
1952 ndev->irq = mod->irq;
1962 mod->dpm = ioremap(res->start, resource_size(res));
1963 if (!mod->dpm) {
1969 mod->dpmctrl = mod->dpm + DPM_PAGE_SIZE;
1979 mod->ctrl = ioremap(res->start, resource_size(res));
1980 if (!mod->ctrl) {
1987 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1988 ret = request_irq(mod->irq, ican3_irq, IRQF_SHARED, DRV_NAME, mod);
1995 napi_enable(&mod->napi);
1996 ret = ican3_startup_module(mod);
2009 netdev_info(mod->ndev, "module %d: registered CAN device\n", pdata->modno);
2013 napi_disable(&mod->napi);
2014 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
2015 free_irq(mod->irq, mod);
2017 iounmap(mod->ctrl);
2019 iounmap(mod->dpm);
2029 struct ican3_dev *mod = netdev_priv(ndev);
2033 napi_disable(&mod->napi);
2034 iowrite8(1 << mod->num, &mod->ctrl->int_disable);
2035 free_irq(mod->irq, mod);
2038 ican3_shutdown_module(mod);
2041 iounmap(mod->ctrl);
2042 iounmap(mod->dpm);