Lines Matching refs:mod
295 static inline void ican3_set_page(struct ican3_dev *mod, unsigned int page) in ican3_set_page() argument
298 iowrite8(page, &mod->dpmctrl->window_address); in ican3_set_page()
312 static int ican3_old_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_old_recv_msg() argument
318 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_recv_msg()
319 peer = ioread8(mod->dpm + MSYNC_PEER); in ican3_old_recv_msg()
320 locl = ioread8(mod->dpm + MSYNC_LOCL); in ican3_old_recv_msg()
324 netdev_dbg(mod->ndev, "no mbox for reading\n"); in ican3_old_recv_msg()
336 ican3_set_page(mod, mbox_page); in ican3_old_recv_msg()
337 memcpy_fromio(msg, mod->dpm, sizeof(*msg)); in ican3_old_recv_msg()
345 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_recv_msg()
346 iowrite8(locl, mod->dpm + MSYNC_LOCL); in ican3_old_recv_msg()
357 static int ican3_old_send_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_old_send_msg() argument
363 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_send_msg()
364 peer = ioread8(mod->dpm + MSYNC_PEER); in ican3_old_send_msg()
365 locl = ioread8(mod->dpm + MSYNC_LOCL); in ican3_old_send_msg()
369 netdev_err(mod->ndev, "no mbox for writing\n"); in ican3_old_send_msg()
378 ican3_set_page(mod, mbox_page); in ican3_old_send_msg()
379 memcpy_toio(mod->dpm, msg, sizeof(*msg)); in ican3_old_send_msg()
385 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_send_msg()
386 iowrite8(locl, mod->dpm + MSYNC_LOCL); in ican3_old_send_msg()
394 static void ican3_init_new_host_interface(struct ican3_dev *mod) in ican3_init_new_host_interface() argument
401 spin_lock_irqsave(&mod->lock, flags); in ican3_init_new_host_interface()
404 mod->rx_num = 0; in ican3_init_new_host_interface()
405 mod->rx_int = 0; in ican3_init_new_host_interface()
408 ican3_set_page(mod, QUEUE_TOHOST); in ican3_init_new_host_interface()
409 dst = mod->dpm; in ican3_init_new_host_interface()
414 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
422 mod->free_page++; in ican3_init_new_host_interface()
426 ican3_set_page(mod, QUEUE_FROMHOST_MID); in ican3_init_new_host_interface()
427 dst = mod->dpm; in ican3_init_new_host_interface()
430 mod->tx_num = 0; in ican3_init_new_host_interface()
435 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
443 mod->free_page++; in ican3_init_new_host_interface()
447 ican3_set_page(mod, QUEUE_FROMHOST_HIGH); in ican3_init_new_host_interface()
448 dst = mod->dpm; in ican3_init_new_host_interface()
452 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
454 mod->free_page++; in ican3_init_new_host_interface()
457 ican3_set_page(mod, QUEUE_FROMHOST_LOW); in ican3_init_new_host_interface()
458 dst = mod->dpm; in ican3_init_new_host_interface()
462 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
464 mod->free_page++; in ican3_init_new_host_interface()
466 spin_unlock_irqrestore(&mod->lock, flags); in ican3_init_new_host_interface()
473 static void ican3_init_fast_host_interface(struct ican3_dev *mod) in ican3_init_fast_host_interface() argument
481 spin_lock_irqsave(&mod->lock, flags); in ican3_init_fast_host_interface()
484 mod->fastrx_start = mod->free_page; in ican3_init_fast_host_interface()
485 mod->fastrx_num = 0; in ican3_init_fast_host_interface()
501 ican3_set_page(mod, mod->free_page); in ican3_init_fast_host_interface()
504 dst = mod->dpm + addr; in ican3_init_fast_host_interface()
511 mod->free_page++; in ican3_init_fast_host_interface()
517 mod->free_page++; in ican3_init_fast_host_interface()
520 mod->fasttx_start = mod->free_page; in ican3_init_fast_host_interface()
521 mod->fasttx_num = 0; in ican3_init_fast_host_interface()
537 ican3_set_page(mod, mod->free_page); in ican3_init_fast_host_interface()
540 dst = mod->dpm + addr; in ican3_init_fast_host_interface()
547 mod->free_page++; in ican3_init_fast_host_interface()
551 spin_unlock_irqrestore(&mod->lock, flags); in ican3_init_fast_host_interface()
561 static int ican3_new_send_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_new_send_msg() argument
564 void __iomem *desc_addr = mod->dpm + (mod->tx_num * sizeof(desc)); in ican3_new_send_msg()
567 ican3_set_page(mod, QUEUE_FROMHOST_MID); in ican3_new_send_msg()
571 netdev_dbg(mod->ndev, "%s: no free buffers\n", __func__); in ican3_new_send_msg()
576 ican3_set_page(mod, desc.pointer); in ican3_new_send_msg()
577 memcpy_toio(mod->dpm, msg, sizeof(*msg)); in ican3_new_send_msg()
580 ican3_set_page(mod, QUEUE_FROMHOST_MID); in ican3_new_send_msg()
585 mod->tx_num = (desc.control & DESC_WRAP) ? 0 : (mod->tx_num + 1); in ican3_new_send_msg()
592 static int ican3_new_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_new_recv_msg() argument
595 void __iomem *desc_addr = mod->dpm + (mod->rx_num * sizeof(desc)); in ican3_new_recv_msg()
598 ican3_set_page(mod, QUEUE_TOHOST); in ican3_new_recv_msg()
602 netdev_dbg(mod->ndev, "%s: no buffers to recv\n", __func__); in ican3_new_recv_msg()
607 ican3_set_page(mod, desc.pointer); in ican3_new_recv_msg()
608 memcpy_fromio(msg, mod->dpm, sizeof(*msg)); in ican3_new_recv_msg()
611 ican3_set_page(mod, QUEUE_TOHOST); in ican3_new_recv_msg()
616 mod->rx_num = (desc.control & DESC_WRAP) ? 0 : (mod->rx_num + 1); in ican3_new_recv_msg()
624 static int ican3_send_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_send_msg() argument
629 spin_lock_irqsave(&mod->lock, flags); in ican3_send_msg()
631 if (mod->iftype == 0) in ican3_send_msg()
632 ret = ican3_old_send_msg(mod, msg); in ican3_send_msg()
634 ret = ican3_new_send_msg(mod, msg); in ican3_send_msg()
636 spin_unlock_irqrestore(&mod->lock, flags); in ican3_send_msg()
640 static int ican3_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_recv_msg() argument
645 spin_lock_irqsave(&mod->lock, flags); in ican3_recv_msg()
647 if (mod->iftype == 0) in ican3_recv_msg()
648 ret = ican3_old_recv_msg(mod, msg); in ican3_recv_msg()
650 ret = ican3_new_recv_msg(mod, msg); in ican3_recv_msg()
652 spin_unlock_irqrestore(&mod->lock, flags); in ican3_recv_msg()
660 static int ican3_msg_connect(struct ican3_dev *mod) in ican3_msg_connect() argument
668 return ican3_send_msg(mod, &msg); in ican3_msg_connect()
671 static int ican3_msg_disconnect(struct ican3_dev *mod) in ican3_msg_disconnect() argument
679 return ican3_send_msg(mod, &msg); in ican3_msg_disconnect()
682 static int ican3_msg_newhostif(struct ican3_dev *mod) in ican3_msg_newhostif() argument
692 WARN_ON(mod->iftype != 0); in ican3_msg_newhostif()
694 ret = ican3_send_msg(mod, &msg); in ican3_msg_newhostif()
699 mod->iftype = 1; in ican3_msg_newhostif()
703 static int ican3_msg_fasthostif(struct ican3_dev *mod) in ican3_msg_fasthostif() argument
713 addr = DPM_PAGE_ADDR(mod->fastrx_start); in ican3_msg_fasthostif()
720 addr = DPM_PAGE_ADDR(mod->fasttx_start); in ican3_msg_fasthostif()
727 WARN_ON(mod->iftype != 1); in ican3_msg_fasthostif()
729 return ican3_send_msg(mod, &msg); in ican3_msg_fasthostif()
736 static int ican3_set_id_filter(struct ican3_dev *mod, bool accept) in ican3_set_id_filter() argument
753 ret = ican3_send_msg(mod, &msg); in ican3_set_id_filter()
774 return ican3_send_msg(mod, &msg); in ican3_set_id_filter()
780 static int ican3_set_bus_state(struct ican3_dev *mod, bool on) in ican3_set_bus_state() argument
782 struct can_bittiming *bt = &mod->can.bittiming; in ican3_set_bus_state()
793 if (mod->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) in ican3_set_bus_state()
796 if (mod->fwtype == ICAN3_FWTYPE_ICANOS) { in ican3_set_bus_state()
807 res = ican3_send_msg(mod, &msg); in ican3_set_bus_state()
817 return ican3_send_msg(mod, &msg); in ican3_set_bus_state()
819 } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) { in ican3_set_bus_state()
834 res = ican3_send_msg(mod, &msg); in ican3_set_bus_state()
852 return ican3_send_msg(mod, &msg); in ican3_set_bus_state()
859 static int ican3_set_termination(struct ican3_dev *mod, bool on) in ican3_set_termination() argument
869 return ican3_send_msg(mod, &msg); in ican3_set_termination()
872 static int ican3_send_inquiry(struct ican3_dev *mod, u8 subspec) in ican3_send_inquiry() argument
882 return ican3_send_msg(mod, &msg); in ican3_send_inquiry()
885 static int ican3_set_buserror(struct ican3_dev *mod, u8 quota) in ican3_set_buserror() argument
889 if (mod->fwtype == ICAN3_FWTYPE_ICANOS) { in ican3_set_buserror()
895 } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) { in ican3_set_buserror()
906 return ican3_send_msg(mod, &msg); in ican3_set_buserror()
913 static void ican3_to_can_frame(struct ican3_dev *mod, in ican3_to_can_frame() argument
945 static void can_frame_to_ican3(struct ican3_dev *mod, in can_frame_to_ican3() argument
958 if (mod->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT) in can_frame_to_ican3()
989 static void ican3_handle_idvers(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_idvers() argument
991 netdev_dbg(mod->ndev, "IDVERS response: %s\n", msg->data); in ican3_handle_idvers()
994 static void ican3_handle_msglost(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_msglost() argument
996 struct net_device *dev = mod->ndev; in ican3_handle_msglost()
1007 netdev_err(mod->ndev, "lost %d control messages\n", msg->data[0]); in ican3_handle_msglost()
1036 static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_cevtind() argument
1038 struct net_device *dev = mod->ndev; in ican3_handle_cevtind()
1040 enum can_state state = mod->can.state; in ican3_handle_cevtind()
1047 netdev_err(mod->ndev, "unable to handle errors on non-SJA1000\n"); in ican3_handle_cevtind()
1053 netdev_err(mod->ndev, "error message too short\n"); in ican3_handle_cevtind()
1075 netdev_dbg(mod->ndev, "bus error interrupt\n"); in ican3_handle_cevtind()
1079 kfree_skb(skb_dequeue(&mod->echoq)); in ican3_handle_cevtind()
1089 ret = ican3_set_buserror(mod, 1); in ican3_handle_cevtind()
1091 netdev_err(mod->ndev, "unable to re-enable bus-error\n"); in ican3_handle_cevtind()
1096 if (!(mod->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)) in ican3_handle_cevtind()
1106 netdev_dbg(mod->ndev, "data overrun interrupt\n"); in ican3_handle_cevtind()
1115 netdev_dbg(mod->ndev, "error warning + passive interrupt\n"); in ican3_handle_cevtind()
1119 mod->can.can_stats.bus_off++; in ican3_handle_cevtind()
1133 mod->can.can_stats.bus_error++; in ican3_handle_cevtind()
1158 if (state != mod->can.state && (state == CAN_STATE_ERROR_WARNING || in ican3_handle_cevtind()
1162 mod->can.can_stats.error_warning++; in ican3_handle_cevtind()
1167 mod->can.can_stats.error_passive++; in ican3_handle_cevtind()
1177 mod->can.state = state; in ican3_handle_cevtind()
1182 static void ican3_handle_inquiry(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_inquiry() argument
1187 mod->bec.rxerr = msg->data[5]; in ican3_handle_inquiry()
1188 mod->bec.txerr = msg->data[6]; in ican3_handle_inquiry()
1189 complete(&mod->buserror_comp); in ican3_handle_inquiry()
1192 mod->termination_enabled = msg->data[6] & HWCONF_TERMINATE_ON; in ican3_handle_inquiry()
1193 complete(&mod->termination_comp); in ican3_handle_inquiry()
1196 netdev_err(mod->ndev, "received an unknown inquiry response\n"); in ican3_handle_inquiry()
1202 static void ican3_handle_nmtsind(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_nmtsind() argument
1216 ican3_handle_cevtind(mod, msg); in ican3_handle_nmtsind()
1223 netdev_warn(mod->ndev, "unknown NMTS event indication %x\n", in ican3_handle_nmtsind()
1230 netdev_warn(mod->ndev, "unhandled NMTS indication %x\n", in ican3_handle_nmtsind()
1236 static void ican3_handle_unknown_message(struct ican3_dev *mod, in ican3_handle_unknown_message() argument
1239 netdev_warn(mod->ndev, "received unknown message: spec 0x%.2x length %d\n", in ican3_handle_unknown_message()
1246 static void ican3_handle_message(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_message() argument
1248 netdev_dbg(mod->ndev, "%s: modno %d spec 0x%.2x len %d bytes\n", __func__, in ican3_handle_message()
1249 mod->num, msg->spec, le16_to_cpu(msg->len)); in ican3_handle_message()
1253 ican3_handle_idvers(mod, msg); in ican3_handle_message()
1257 ican3_handle_msglost(mod, msg); in ican3_handle_message()
1260 ican3_handle_cevtind(mod, msg); in ican3_handle_message()
1263 ican3_handle_inquiry(mod, msg); in ican3_handle_message()
1266 ican3_handle_nmtsind(mod, msg); in ican3_handle_message()
1269 ican3_handle_unknown_message(mod, msg); in ican3_handle_message()
1278 static void ican3_put_echo_skb(struct ican3_dev *mod, struct sk_buff *skb) in ican3_put_echo_skb() argument
1285 skb_queue_tail(&mod->echoq, skb); in ican3_put_echo_skb()
1288 static unsigned int ican3_get_echo_skb(struct ican3_dev *mod) in ican3_get_echo_skb() argument
1290 struct sk_buff *skb = skb_dequeue(&mod->echoq); in ican3_get_echo_skb()
1296 netdev_err(mod->ndev, "BUG: echo skb not occupied\n"); in ican3_get_echo_skb()
1312 skb->dev = mod->ndev; in ican3_get_echo_skb()
1326 static bool ican3_echo_skb_matches(struct ican3_dev *mod, struct sk_buff *skb) in ican3_echo_skb_matches() argument
1329 struct sk_buff *echo_skb = skb_peek(&mod->echoq); in ican3_echo_skb_matches()
1350 static bool ican3_txok(struct ican3_dev *mod) in ican3_txok() argument
1356 if (skb_queue_len(&mod->echoq) >= ICAN3_TX_BUFFERS) in ican3_txok()
1360 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16)); in ican3_txok()
1361 desc = mod->dpm + ((mod->fasttx_num % 16) * sizeof(*desc)); in ican3_txok()
1376 static int ican3_recv_skb(struct ican3_dev *mod) in ican3_recv_skb() argument
1378 struct net_device *ndev = mod->ndev; in ican3_recv_skb()
1386 spin_lock_irqsave(&mod->lock, flags); in ican3_recv_skb()
1389 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16)); in ican3_recv_skb()
1390 desc_addr = mod->dpm + ((mod->fastrx_num % 16) * sizeof(desc)); in ican3_recv_skb()
1393 spin_unlock_irqrestore(&mod->lock, flags); in ican3_recv_skb()
1407 ican3_to_can_frame(mod, &desc, cf); in ican3_recv_skb()
1419 if (ican3_echo_skb_matches(mod, skb)) { in ican3_recv_skb()
1421 stats->tx_bytes += ican3_get_echo_skb(mod); in ican3_recv_skb()
1435 spin_lock_irqsave(&mod->lock, flags); in ican3_recv_skb()
1437 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16)); in ican3_recv_skb()
1441 mod->fastrx_num = (desc.control & DESC_WRAP) ? 0 in ican3_recv_skb()
1442 : (mod->fastrx_num + 1); in ican3_recv_skb()
1445 spin_unlock_irqrestore(&mod->lock, flags); in ican3_recv_skb()
1451 struct ican3_dev *mod = container_of(napi, struct ican3_dev, napi); in ican3_napi() local
1459 ret = ican3_recv_msg(mod, &msg); in ican3_napi()
1463 ican3_handle_message(mod, &msg); in ican3_napi()
1468 ret = ican3_recv_skb(mod); in ican3_napi()
1480 spin_lock_irqsave(&mod->lock, flags); in ican3_napi()
1483 if (netif_queue_stopped(mod->ndev) && ican3_txok(mod)) in ican3_napi()
1484 netif_wake_queue(mod->ndev); in ican3_napi()
1486 spin_unlock_irqrestore(&mod->lock, flags); in ican3_napi()
1489 iowrite8(1 << mod->num, &mod->ctrl->int_enable); in ican3_napi()
1495 struct ican3_dev *mod = dev_id; in ican3_irq() local
1502 stat = ioread8(&mod->ctrl->int_disable) & (1 << mod->num); in ican3_irq()
1503 if (stat == (1 << mod->num)) in ican3_irq()
1507 ioread8(&mod->dpmctrl->interrupt); in ican3_irq()
1510 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_irq()
1511 napi_schedule(&mod->napi); in ican3_irq()
1524 static int ican3_reset_module(struct ican3_dev *mod) in ican3_reset_module() argument
1530 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_reset_module()
1533 mod->free_page = DPM_FREE_START; in ican3_reset_module()
1535 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_reset_module()
1536 runold = ioread8(mod->dpm + TARGET_RUNNING); in ican3_reset_module()
1539 iowrite8(0x00, &mod->dpmctrl->hwreset); in ican3_reset_module()
1544 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_reset_module()
1545 runnew = ioread8(mod->dpm + TARGET_RUNNING); in ican3_reset_module()
1552 netdev_err(mod->ndev, "failed to reset CAN module\n"); in ican3_reset_module()
1556 static void ican3_shutdown_module(struct ican3_dev *mod) in ican3_shutdown_module() argument
1558 ican3_msg_disconnect(mod); in ican3_shutdown_module()
1559 ican3_reset_module(mod); in ican3_shutdown_module()
1565 static int ican3_startup_module(struct ican3_dev *mod) in ican3_startup_module() argument
1569 ret = ican3_reset_module(mod); in ican3_startup_module()
1571 netdev_err(mod->ndev, "unable to reset module\n"); in ican3_startup_module()
1576 memcpy_fromio(mod->fwinfo, mod->dpm + FIRMWARE_STAMP, sizeof(mod->fwinfo) - 1); in ican3_startup_module()
1577 if (strncmp(mod->fwinfo, "JANZ-ICAN3", 10)) { in ican3_startup_module()
1578 netdev_err(mod->ndev, "ICAN3 not detected (found %s)\n", mod->fwinfo); in ican3_startup_module()
1581 if (strstr(mod->fwinfo, "CAL/CANopen")) in ican3_startup_module()
1582 mod->fwtype = ICAN3_FWTYPE_CAL_CANOPEN; in ican3_startup_module()
1584 mod->fwtype = ICAN3_FWTYPE_ICANOS; in ican3_startup_module()
1587 iowrite8(1 << mod->num, &mod->ctrl->int_enable); in ican3_startup_module()
1589 ret = ican3_msg_connect(mod); in ican3_startup_module()
1591 netdev_err(mod->ndev, "unable to connect to module\n"); in ican3_startup_module()
1595 ican3_init_new_host_interface(mod); in ican3_startup_module()
1596 ret = ican3_msg_newhostif(mod); in ican3_startup_module()
1598 netdev_err(mod->ndev, "unable to switch to new-style interface\n"); in ican3_startup_module()
1603 ret = ican3_set_termination(mod, true); in ican3_startup_module()
1605 netdev_err(mod->ndev, "unable to enable termination\n"); in ican3_startup_module()
1610 ret = ican3_set_buserror(mod, 1); in ican3_startup_module()
1612 netdev_err(mod->ndev, "unable to set bus-error\n"); in ican3_startup_module()
1616 ican3_init_fast_host_interface(mod); in ican3_startup_module()
1617 ret = ican3_msg_fasthostif(mod); in ican3_startup_module()
1619 netdev_err(mod->ndev, "unable to switch to fast host interface\n"); in ican3_startup_module()
1623 ret = ican3_set_id_filter(mod, true); in ican3_startup_module()
1625 netdev_err(mod->ndev, "unable to set acceptance filter\n"); in ican3_startup_module()
1638 struct ican3_dev *mod = netdev_priv(ndev); in ican3_open() local
1644 netdev_err(mod->ndev, "unable to start CAN layer\n"); in ican3_open()
1649 ret = ican3_set_bus_state(mod, true); in ican3_open()
1651 netdev_err(mod->ndev, "unable to set bus-on\n"); in ican3_open()
1657 mod->can.state = CAN_STATE_ERROR_ACTIVE; in ican3_open()
1665 struct ican3_dev *mod = netdev_priv(ndev); in ican3_stop() local
1670 mod->can.state = CAN_STATE_STOPPED; in ican3_stop()
1673 ret = ican3_set_bus_state(mod, false); in ican3_stop()
1675 netdev_err(mod->ndev, "unable to set bus-off\n"); in ican3_stop()
1680 skb_queue_purge(&mod->echoq); in ican3_stop()
1689 struct ican3_dev *mod = netdev_priv(ndev); in ican3_xmit() local
1698 spin_lock_irqsave(&mod->lock, flags); in ican3_xmit()
1701 if (!ican3_txok(mod)) { in ican3_xmit()
1702 netdev_err(mod->ndev, "BUG: no free descriptors\n"); in ican3_xmit()
1703 spin_unlock_irqrestore(&mod->lock, flags); in ican3_xmit()
1708 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16)); in ican3_xmit()
1709 desc_addr = mod->dpm + ((mod->fasttx_num % 16) * sizeof(desc)); in ican3_xmit()
1714 can_frame_to_ican3(mod, cf, &desc); in ican3_xmit()
1722 ican3_put_echo_skb(mod, skb); in ican3_xmit()
1733 iowrite8(0x01, &mod->dpmctrl->interrupt); in ican3_xmit()
1739 mod->fasttx_num = (desc.control & DESC_WRAP) ? 0 in ican3_xmit()
1740 : (mod->fasttx_num + 1); in ican3_xmit()
1743 if (!ican3_txok(mod)) in ican3_xmit()
1746 spin_unlock_irqrestore(&mod->lock, flags); in ican3_xmit()
1776 struct ican3_dev *mod = netdev_priv(ndev); in ican3_set_mode() local
1783 ret = ican3_set_bus_state(mod, true); in ican3_set_mode()
1790 mod->can.state = CAN_STATE_ERROR_ACTIVE; in ican3_set_mode()
1801 struct ican3_dev *mod = netdev_priv(ndev); in ican3_get_berr_counter() local
1804 ret = ican3_send_inquiry(mod, INQUIRY_STATUS); in ican3_get_berr_counter()
1808 if (!wait_for_completion_timeout(&mod->buserror_comp, HZ)) { in ican3_get_berr_counter()
1809 netdev_info(mod->ndev, "%s timed out\n", __func__); in ican3_get_berr_counter()
1813 bec->rxerr = mod->bec.rxerr; in ican3_get_berr_counter()
1814 bec->txerr = mod->bec.txerr; in ican3_get_berr_counter()
1826 struct ican3_dev *mod = netdev_priv(to_net_dev(dev)); in ican3_sysfs_show_term() local
1829 ret = ican3_send_inquiry(mod, INQUIRY_TERMINATION); in ican3_sysfs_show_term()
1833 if (!wait_for_completion_timeout(&mod->termination_comp, HZ)) { in ican3_sysfs_show_term()
1834 netdev_info(mod->ndev, "%s timed out\n", __func__); in ican3_sysfs_show_term()
1838 return snprintf(buf, PAGE_SIZE, "%u\n", mod->termination_enabled); in ican3_sysfs_show_term()
1845 struct ican3_dev *mod = netdev_priv(to_net_dev(dev)); in ican3_sysfs_set_term() local
1852 ret = ican3_set_termination(mod, enable); in ican3_sysfs_set_term()
1863 struct ican3_dev *mod = netdev_priv(to_net_dev(dev)); in ican3_sysfs_show_fwinfo() local
1865 return scnprintf(buf, PAGE_SIZE, "%s\n", mod->fwinfo); in ican3_sysfs_show_fwinfo()
1890 struct ican3_dev *mod; in ican3_probe() local
1905 ndev = alloc_candev(sizeof(*mod), 0); in ican3_probe()
1913 mod = netdev_priv(ndev); in ican3_probe()
1914 mod->ndev = ndev; in ican3_probe()
1915 mod->num = pdata->modno; in ican3_probe()
1916 netif_napi_add(ndev, &mod->napi, ican3_napi, ICAN3_RX_BUFFERS); in ican3_probe()
1917 skb_queue_head_init(&mod->echoq); in ican3_probe()
1918 spin_lock_init(&mod->lock); in ican3_probe()
1919 init_completion(&mod->termination_comp); in ican3_probe()
1920 init_completion(&mod->buserror_comp); in ican3_probe()
1926 mod->free_page = DPM_FREE_START; in ican3_probe()
1932 mod->can.clock.freq = ICAN3_CAN_CLOCK; in ican3_probe()
1933 mod->can.bittiming_const = &ican3_bittiming_const; in ican3_probe()
1934 mod->can.do_set_mode = ican3_set_mode; in ican3_probe()
1935 mod->can.do_get_berr_counter = ican3_get_berr_counter; in ican3_probe()
1936 mod->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES in ican3_probe()
1941 mod->irq = platform_get_irq(pdev, 0); in ican3_probe()
1942 if (mod->irq < 0) { in ican3_probe()
1948 ndev->irq = mod->irq; in ican3_probe()
1958 mod->dpm = ioremap(res->start, resource_size(res)); in ican3_probe()
1959 if (!mod->dpm) { in ican3_probe()
1965 mod->dpmctrl = mod->dpm + DPM_PAGE_SIZE; in ican3_probe()
1975 mod->ctrl = ioremap(res->start, resource_size(res)); in ican3_probe()
1976 if (!mod->ctrl) { in ican3_probe()
1983 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_probe()
1984 ret = request_irq(mod->irq, ican3_irq, IRQF_SHARED, DRV_NAME, mod); in ican3_probe()
1991 napi_enable(&mod->napi); in ican3_probe()
1992 ret = ican3_startup_module(mod); in ican3_probe()
2005 netdev_info(mod->ndev, "module %d: registered CAN device\n", pdata->modno); in ican3_probe()
2009 napi_disable(&mod->napi); in ican3_probe()
2010 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_probe()
2011 free_irq(mod->irq, mod); in ican3_probe()
2013 iounmap(mod->ctrl); in ican3_probe()
2015 iounmap(mod->dpm); in ican3_probe()
2025 struct ican3_dev *mod = netdev_priv(ndev); in ican3_remove() local
2029 napi_disable(&mod->napi); in ican3_remove()
2030 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_remove()
2031 free_irq(mod->irq, mod); in ican3_remove()
2034 ican3_shutdown_module(mod); in ican3_remove()
2037 iounmap(mod->ctrl); in ican3_remove()
2038 iounmap(mod->dpm); in ican3_remove()