Lines Matching refs:mod
278 static inline void ican3_set_page(struct ican3_dev *mod, unsigned int page) in ican3_set_page() argument
281 iowrite8(page, &mod->dpmctrl->window_address); in ican3_set_page()
295 static int ican3_old_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_old_recv_msg() argument
301 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_recv_msg()
302 peer = ioread8(mod->dpm + MSYNC_PEER); in ican3_old_recv_msg()
303 locl = ioread8(mod->dpm + MSYNC_LOCL); in ican3_old_recv_msg()
307 netdev_dbg(mod->ndev, "no mbox for reading\n"); in ican3_old_recv_msg()
319 ican3_set_page(mod, mbox_page); in ican3_old_recv_msg()
320 memcpy_fromio(msg, mod->dpm, sizeof(*msg)); in ican3_old_recv_msg()
328 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_recv_msg()
329 iowrite8(locl, mod->dpm + MSYNC_LOCL); in ican3_old_recv_msg()
340 static int ican3_old_send_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_old_send_msg() argument
346 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_send_msg()
347 peer = ioread8(mod->dpm + MSYNC_PEER); in ican3_old_send_msg()
348 locl = ioread8(mod->dpm + MSYNC_LOCL); in ican3_old_send_msg()
352 netdev_err(mod->ndev, "no mbox for writing\n"); in ican3_old_send_msg()
361 ican3_set_page(mod, mbox_page); in ican3_old_send_msg()
362 memcpy_toio(mod->dpm, msg, sizeof(*msg)); in ican3_old_send_msg()
368 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_old_send_msg()
369 iowrite8(locl, mod->dpm + MSYNC_LOCL); in ican3_old_send_msg()
377 static void ican3_init_new_host_interface(struct ican3_dev *mod) in ican3_init_new_host_interface() argument
384 spin_lock_irqsave(&mod->lock, flags); in ican3_init_new_host_interface()
387 mod->rx_num = 0; in ican3_init_new_host_interface()
388 mod->rx_int = 0; in ican3_init_new_host_interface()
391 ican3_set_page(mod, QUEUE_TOHOST); in ican3_init_new_host_interface()
392 dst = mod->dpm; in ican3_init_new_host_interface()
397 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
405 mod->free_page++; in ican3_init_new_host_interface()
409 ican3_set_page(mod, QUEUE_FROMHOST_MID); in ican3_init_new_host_interface()
410 dst = mod->dpm; in ican3_init_new_host_interface()
413 mod->tx_num = 0; in ican3_init_new_host_interface()
418 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
426 mod->free_page++; in ican3_init_new_host_interface()
430 ican3_set_page(mod, QUEUE_FROMHOST_HIGH); in ican3_init_new_host_interface()
431 dst = mod->dpm; in ican3_init_new_host_interface()
435 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
437 mod->free_page++; in ican3_init_new_host_interface()
440 ican3_set_page(mod, QUEUE_FROMHOST_LOW); in ican3_init_new_host_interface()
441 dst = mod->dpm; in ican3_init_new_host_interface()
445 desc.pointer = mod->free_page; in ican3_init_new_host_interface()
447 mod->free_page++; in ican3_init_new_host_interface()
449 spin_unlock_irqrestore(&mod->lock, flags); in ican3_init_new_host_interface()
456 static void ican3_init_fast_host_interface(struct ican3_dev *mod) in ican3_init_fast_host_interface() argument
464 spin_lock_irqsave(&mod->lock, flags); in ican3_init_fast_host_interface()
467 mod->fastrx_start = mod->free_page; in ican3_init_fast_host_interface()
468 mod->fastrx_num = 0; in ican3_init_fast_host_interface()
484 ican3_set_page(mod, mod->free_page); in ican3_init_fast_host_interface()
487 dst = mod->dpm + addr; in ican3_init_fast_host_interface()
494 mod->free_page++; in ican3_init_fast_host_interface()
500 mod->free_page++; in ican3_init_fast_host_interface()
503 mod->fasttx_start = mod->free_page; in ican3_init_fast_host_interface()
504 mod->fasttx_num = 0; in ican3_init_fast_host_interface()
520 ican3_set_page(mod, mod->free_page); in ican3_init_fast_host_interface()
523 dst = mod->dpm + addr; in ican3_init_fast_host_interface()
530 mod->free_page++; in ican3_init_fast_host_interface()
534 spin_unlock_irqrestore(&mod->lock, flags); in ican3_init_fast_host_interface()
544 static int ican3_new_send_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_new_send_msg() argument
547 void __iomem *desc_addr = mod->dpm + (mod->tx_num * sizeof(desc)); in ican3_new_send_msg()
550 ican3_set_page(mod, QUEUE_FROMHOST_MID); in ican3_new_send_msg()
554 netdev_dbg(mod->ndev, "%s: no free buffers\n", __func__); in ican3_new_send_msg()
559 ican3_set_page(mod, desc.pointer); in ican3_new_send_msg()
560 memcpy_toio(mod->dpm, msg, sizeof(*msg)); in ican3_new_send_msg()
563 ican3_set_page(mod, QUEUE_FROMHOST_MID); in ican3_new_send_msg()
568 mod->tx_num = (desc.control & DESC_WRAP) ? 0 : (mod->tx_num + 1); in ican3_new_send_msg()
575 static int ican3_new_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_new_recv_msg() argument
578 void __iomem *desc_addr = mod->dpm + (mod->rx_num * sizeof(desc)); in ican3_new_recv_msg()
581 ican3_set_page(mod, QUEUE_TOHOST); in ican3_new_recv_msg()
585 netdev_dbg(mod->ndev, "%s: no buffers to recv\n", __func__); in ican3_new_recv_msg()
590 ican3_set_page(mod, desc.pointer); in ican3_new_recv_msg()
591 memcpy_fromio(msg, mod->dpm, sizeof(*msg)); in ican3_new_recv_msg()
594 ican3_set_page(mod, QUEUE_TOHOST); in ican3_new_recv_msg()
599 mod->rx_num = (desc.control & DESC_WRAP) ? 0 : (mod->rx_num + 1); in ican3_new_recv_msg()
607 static int ican3_send_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_send_msg() argument
612 spin_lock_irqsave(&mod->lock, flags); in ican3_send_msg()
614 if (mod->iftype == 0) in ican3_send_msg()
615 ret = ican3_old_send_msg(mod, msg); in ican3_send_msg()
617 ret = ican3_new_send_msg(mod, msg); in ican3_send_msg()
619 spin_unlock_irqrestore(&mod->lock, flags); in ican3_send_msg()
623 static int ican3_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_recv_msg() argument
628 spin_lock_irqsave(&mod->lock, flags); in ican3_recv_msg()
630 if (mod->iftype == 0) in ican3_recv_msg()
631 ret = ican3_old_recv_msg(mod, msg); in ican3_recv_msg()
633 ret = ican3_new_recv_msg(mod, msg); in ican3_recv_msg()
635 spin_unlock_irqrestore(&mod->lock, flags); in ican3_recv_msg()
643 static int ican3_msg_connect(struct ican3_dev *mod) in ican3_msg_connect() argument
651 return ican3_send_msg(mod, &msg); in ican3_msg_connect()
654 static int ican3_msg_disconnect(struct ican3_dev *mod) in ican3_msg_disconnect() argument
662 return ican3_send_msg(mod, &msg); in ican3_msg_disconnect()
665 static int ican3_msg_newhostif(struct ican3_dev *mod) in ican3_msg_newhostif() argument
675 WARN_ON(mod->iftype != 0); in ican3_msg_newhostif()
677 ret = ican3_send_msg(mod, &msg); in ican3_msg_newhostif()
682 mod->iftype = 1; in ican3_msg_newhostif()
686 static int ican3_msg_fasthostif(struct ican3_dev *mod) in ican3_msg_fasthostif() argument
696 addr = DPM_PAGE_ADDR(mod->fastrx_start); in ican3_msg_fasthostif()
703 addr = DPM_PAGE_ADDR(mod->fasttx_start); in ican3_msg_fasthostif()
710 WARN_ON(mod->iftype != 1); in ican3_msg_fasthostif()
712 return ican3_send_msg(mod, &msg); in ican3_msg_fasthostif()
719 static int ican3_set_id_filter(struct ican3_dev *mod, bool accept) in ican3_set_id_filter() argument
736 ret = ican3_send_msg(mod, &msg); in ican3_set_id_filter()
757 return ican3_send_msg(mod, &msg); in ican3_set_id_filter()
763 static int ican3_set_bus_state(struct ican3_dev *mod, bool on) in ican3_set_bus_state() argument
765 struct can_bittiming *bt = &mod->can.bittiming; in ican3_set_bus_state()
776 if (mod->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) in ican3_set_bus_state()
779 if (mod->fwtype == ICAN3_FWTYPE_ICANOS) { in ican3_set_bus_state()
790 res = ican3_send_msg(mod, &msg); in ican3_set_bus_state()
800 return ican3_send_msg(mod, &msg); in ican3_set_bus_state()
802 } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) { in ican3_set_bus_state()
817 return ican3_send_msg(mod, &msg); in ican3_set_bus_state()
822 static int ican3_set_termination(struct ican3_dev *mod, bool on) in ican3_set_termination() argument
832 return ican3_send_msg(mod, &msg); in ican3_set_termination()
835 static int ican3_send_inquiry(struct ican3_dev *mod, u8 subspec) in ican3_send_inquiry() argument
845 return ican3_send_msg(mod, &msg); in ican3_send_inquiry()
848 static int ican3_set_buserror(struct ican3_dev *mod, u8 quota) in ican3_set_buserror() argument
858 return ican3_send_msg(mod, &msg); in ican3_set_buserror()
865 static void ican3_to_can_frame(struct ican3_dev *mod, in ican3_to_can_frame() argument
897 static void can_frame_to_ican3(struct ican3_dev *mod, in can_frame_to_ican3() argument
910 if (mod->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT) in can_frame_to_ican3()
941 static void ican3_handle_idvers(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_idvers() argument
943 netdev_dbg(mod->ndev, "IDVERS response: %s\n", msg->data); in ican3_handle_idvers()
946 static void ican3_handle_msglost(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_msglost() argument
948 struct net_device *dev = mod->ndev; in ican3_handle_msglost()
959 netdev_err(mod->ndev, "lost %d control messages\n", msg->data[0]); in ican3_handle_msglost()
988 static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_cevtind() argument
990 struct net_device *dev = mod->ndev; in ican3_handle_cevtind()
992 enum can_state state = mod->can.state; in ican3_handle_cevtind()
999 netdev_err(mod->ndev, "unable to handle errors on non-SJA1000\n"); in ican3_handle_cevtind()
1005 netdev_err(mod->ndev, "error message too short\n"); in ican3_handle_cevtind()
1027 netdev_dbg(mod->ndev, "bus error interrupt\n"); in ican3_handle_cevtind()
1031 kfree_skb(skb_dequeue(&mod->echoq)); in ican3_handle_cevtind()
1041 ret = ican3_set_buserror(mod, 1); in ican3_handle_cevtind()
1043 netdev_err(mod->ndev, "unable to re-enable bus-error\n"); in ican3_handle_cevtind()
1048 if (!(mod->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)) in ican3_handle_cevtind()
1058 netdev_dbg(mod->ndev, "data overrun interrupt\n"); in ican3_handle_cevtind()
1067 netdev_dbg(mod->ndev, "error warning + passive interrupt\n"); in ican3_handle_cevtind()
1071 mod->can.can_stats.bus_off++; in ican3_handle_cevtind()
1085 mod->can.can_stats.bus_error++; in ican3_handle_cevtind()
1110 if (state != mod->can.state && (state == CAN_STATE_ERROR_WARNING || in ican3_handle_cevtind()
1114 mod->can.can_stats.error_warning++; in ican3_handle_cevtind()
1119 mod->can.can_stats.error_passive++; in ican3_handle_cevtind()
1129 mod->can.state = state; in ican3_handle_cevtind()
1134 static void ican3_handle_inquiry(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_inquiry() argument
1139 mod->bec.rxerr = msg->data[5]; in ican3_handle_inquiry()
1140 mod->bec.txerr = msg->data[6]; in ican3_handle_inquiry()
1141 complete(&mod->buserror_comp); in ican3_handle_inquiry()
1144 mod->termination_enabled = msg->data[6] & HWCONF_TERMINATE_ON; in ican3_handle_inquiry()
1145 complete(&mod->termination_comp); in ican3_handle_inquiry()
1148 netdev_err(mod->ndev, "received an unknown inquiry response\n"); in ican3_handle_inquiry()
1153 static void ican3_handle_unknown_message(struct ican3_dev *mod, in ican3_handle_unknown_message() argument
1156 netdev_warn(mod->ndev, "received unknown message: spec 0x%.2x length %d\n", in ican3_handle_unknown_message()
1163 static void ican3_handle_message(struct ican3_dev *mod, struct ican3_msg *msg) in ican3_handle_message() argument
1165 netdev_dbg(mod->ndev, "%s: modno %d spec 0x%.2x len %d bytes\n", __func__, in ican3_handle_message()
1166 mod->num, msg->spec, le16_to_cpu(msg->len)); in ican3_handle_message()
1170 ican3_handle_idvers(mod, msg); in ican3_handle_message()
1174 ican3_handle_msglost(mod, msg); in ican3_handle_message()
1177 ican3_handle_cevtind(mod, msg); in ican3_handle_message()
1180 ican3_handle_inquiry(mod, msg); in ican3_handle_message()
1183 ican3_handle_unknown_message(mod, msg); in ican3_handle_message()
1192 static void ican3_put_echo_skb(struct ican3_dev *mod, struct sk_buff *skb) in ican3_put_echo_skb() argument
1199 skb_queue_tail(&mod->echoq, skb); in ican3_put_echo_skb()
1202 static unsigned int ican3_get_echo_skb(struct ican3_dev *mod) in ican3_get_echo_skb() argument
1204 struct sk_buff *skb = skb_dequeue(&mod->echoq); in ican3_get_echo_skb()
1210 netdev_err(mod->ndev, "BUG: echo skb not occupied\n"); in ican3_get_echo_skb()
1226 skb->dev = mod->ndev; in ican3_get_echo_skb()
1240 static bool ican3_echo_skb_matches(struct ican3_dev *mod, struct sk_buff *skb) in ican3_echo_skb_matches() argument
1243 struct sk_buff *echo_skb = skb_peek(&mod->echoq); in ican3_echo_skb_matches()
1264 static bool ican3_txok(struct ican3_dev *mod) in ican3_txok() argument
1270 if (skb_queue_len(&mod->echoq) >= ICAN3_TX_BUFFERS) in ican3_txok()
1274 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16)); in ican3_txok()
1275 desc = mod->dpm + ((mod->fasttx_num % 16) * sizeof(*desc)); in ican3_txok()
1290 static int ican3_recv_skb(struct ican3_dev *mod) in ican3_recv_skb() argument
1292 struct net_device *ndev = mod->ndev; in ican3_recv_skb()
1300 spin_lock_irqsave(&mod->lock, flags); in ican3_recv_skb()
1303 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16)); in ican3_recv_skb()
1304 desc_addr = mod->dpm + ((mod->fastrx_num % 16) * sizeof(desc)); in ican3_recv_skb()
1307 spin_unlock_irqrestore(&mod->lock, flags); in ican3_recv_skb()
1321 ican3_to_can_frame(mod, &desc, cf); in ican3_recv_skb()
1333 if (ican3_echo_skb_matches(mod, skb)) { in ican3_recv_skb()
1335 stats->tx_bytes += ican3_get_echo_skb(mod); in ican3_recv_skb()
1349 spin_lock_irqsave(&mod->lock, flags); in ican3_recv_skb()
1351 ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16)); in ican3_recv_skb()
1355 mod->fastrx_num = (desc.control & DESC_WRAP) ? 0 in ican3_recv_skb()
1356 : (mod->fastrx_num + 1); in ican3_recv_skb()
1359 spin_unlock_irqrestore(&mod->lock, flags); in ican3_recv_skb()
1365 struct ican3_dev *mod = container_of(napi, struct ican3_dev, napi); in ican3_napi() local
1373 ret = ican3_recv_msg(mod, &msg); in ican3_napi()
1377 ican3_handle_message(mod, &msg); in ican3_napi()
1382 ret = ican3_recv_skb(mod); in ican3_napi()
1394 spin_lock_irqsave(&mod->lock, flags); in ican3_napi()
1397 if (netif_queue_stopped(mod->ndev) && ican3_txok(mod)) in ican3_napi()
1398 netif_wake_queue(mod->ndev); in ican3_napi()
1400 spin_unlock_irqrestore(&mod->lock, flags); in ican3_napi()
1403 iowrite8(1 << mod->num, &mod->ctrl->int_enable); in ican3_napi()
1409 struct ican3_dev *mod = dev_id; in ican3_irq() local
1416 stat = ioread8(&mod->ctrl->int_disable) & (1 << mod->num); in ican3_irq()
1417 if (stat == (1 << mod->num)) in ican3_irq()
1421 ioread8(&mod->dpmctrl->interrupt); in ican3_irq()
1424 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_irq()
1425 napi_schedule(&mod->napi); in ican3_irq()
1438 static int ican3_reset_module(struct ican3_dev *mod) in ican3_reset_module() argument
1444 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_reset_module()
1447 mod->free_page = DPM_FREE_START; in ican3_reset_module()
1449 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_reset_module()
1450 runold = ioread8(mod->dpm + TARGET_RUNNING); in ican3_reset_module()
1453 iowrite8(0x00, &mod->dpmctrl->hwreset); in ican3_reset_module()
1458 ican3_set_page(mod, QUEUE_OLD_CONTROL); in ican3_reset_module()
1459 runnew = ioread8(mod->dpm + TARGET_RUNNING); in ican3_reset_module()
1466 netdev_err(mod->ndev, "failed to reset CAN module\n"); in ican3_reset_module()
1470 static void ican3_shutdown_module(struct ican3_dev *mod) in ican3_shutdown_module() argument
1472 ican3_msg_disconnect(mod); in ican3_shutdown_module()
1473 ican3_reset_module(mod); in ican3_shutdown_module()
1479 static int ican3_startup_module(struct ican3_dev *mod) in ican3_startup_module() argument
1483 ret = ican3_reset_module(mod); in ican3_startup_module()
1485 netdev_err(mod->ndev, "unable to reset module\n"); in ican3_startup_module()
1490 memcpy_fromio(mod->fwinfo, mod->dpm + FIRMWARE_STAMP, sizeof(mod->fwinfo) - 1); in ican3_startup_module()
1491 if (strncmp(mod->fwinfo, "JANZ-ICAN3", 10)) { in ican3_startup_module()
1492 netdev_err(mod->ndev, "ICAN3 not detected (found %s)\n", mod->fwinfo); in ican3_startup_module()
1495 if (strstr(mod->fwinfo, "CAL/CANopen")) in ican3_startup_module()
1496 mod->fwtype = ICAN3_FWTYPE_CAL_CANOPEN; in ican3_startup_module()
1498 mod->fwtype = ICAN3_FWTYPE_ICANOS; in ican3_startup_module()
1501 iowrite8(1 << mod->num, &mod->ctrl->int_enable); in ican3_startup_module()
1503 ret = ican3_msg_connect(mod); in ican3_startup_module()
1505 netdev_err(mod->ndev, "unable to connect to module\n"); in ican3_startup_module()
1509 ican3_init_new_host_interface(mod); in ican3_startup_module()
1510 ret = ican3_msg_newhostif(mod); in ican3_startup_module()
1512 netdev_err(mod->ndev, "unable to switch to new-style interface\n"); in ican3_startup_module()
1517 ret = ican3_set_termination(mod, true); in ican3_startup_module()
1519 netdev_err(mod->ndev, "unable to enable termination\n"); in ican3_startup_module()
1524 ret = ican3_set_buserror(mod, 1); in ican3_startup_module()
1526 netdev_err(mod->ndev, "unable to set bus-error\n"); in ican3_startup_module()
1530 ican3_init_fast_host_interface(mod); in ican3_startup_module()
1531 ret = ican3_msg_fasthostif(mod); in ican3_startup_module()
1533 netdev_err(mod->ndev, "unable to switch to fast host interface\n"); in ican3_startup_module()
1537 ret = ican3_set_id_filter(mod, true); in ican3_startup_module()
1539 netdev_err(mod->ndev, "unable to set acceptance filter\n"); in ican3_startup_module()
1552 struct ican3_dev *mod = netdev_priv(ndev); in ican3_open() local
1558 netdev_err(mod->ndev, "unable to start CAN layer\n"); in ican3_open()
1563 ret = ican3_set_bus_state(mod, true); in ican3_open()
1565 netdev_err(mod->ndev, "unable to set bus-on\n"); in ican3_open()
1571 mod->can.state = CAN_STATE_ERROR_ACTIVE; in ican3_open()
1579 struct ican3_dev *mod = netdev_priv(ndev); in ican3_stop() local
1584 mod->can.state = CAN_STATE_STOPPED; in ican3_stop()
1587 ret = ican3_set_bus_state(mod, false); in ican3_stop()
1589 netdev_err(mod->ndev, "unable to set bus-off\n"); in ican3_stop()
1594 skb_queue_purge(&mod->echoq); in ican3_stop()
1603 struct ican3_dev *mod = netdev_priv(ndev); in ican3_xmit() local
1612 spin_lock_irqsave(&mod->lock, flags); in ican3_xmit()
1615 if (!ican3_txok(mod)) { in ican3_xmit()
1616 netdev_err(mod->ndev, "BUG: no free descriptors\n"); in ican3_xmit()
1617 spin_unlock_irqrestore(&mod->lock, flags); in ican3_xmit()
1622 ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16)); in ican3_xmit()
1623 desc_addr = mod->dpm + ((mod->fasttx_num % 16) * sizeof(desc)); in ican3_xmit()
1628 can_frame_to_ican3(mod, cf, &desc); in ican3_xmit()
1636 ican3_put_echo_skb(mod, skb); in ican3_xmit()
1647 iowrite8(0x01, &mod->dpmctrl->interrupt); in ican3_xmit()
1653 mod->fasttx_num = (desc.control & DESC_WRAP) ? 0 in ican3_xmit()
1654 : (mod->fasttx_num + 1); in ican3_xmit()
1657 if (!ican3_txok(mod)) in ican3_xmit()
1660 spin_unlock_irqrestore(&mod->lock, flags); in ican3_xmit()
1690 struct ican3_dev *mod = netdev_priv(ndev); in ican3_set_mode() local
1697 ret = ican3_set_bus_state(mod, true); in ican3_set_mode()
1704 mod->can.state = CAN_STATE_ERROR_ACTIVE; in ican3_set_mode()
1715 struct ican3_dev *mod = netdev_priv(ndev); in ican3_get_berr_counter() local
1718 ret = ican3_send_inquiry(mod, INQUIRY_STATUS); in ican3_get_berr_counter()
1722 if (!wait_for_completion_timeout(&mod->buserror_comp, HZ)) { in ican3_get_berr_counter()
1723 netdev_info(mod->ndev, "%s timed out\n", __func__); in ican3_get_berr_counter()
1727 bec->rxerr = mod->bec.rxerr; in ican3_get_berr_counter()
1728 bec->txerr = mod->bec.txerr; in ican3_get_berr_counter()
1740 struct ican3_dev *mod = netdev_priv(to_net_dev(dev)); in ican3_sysfs_show_term() local
1743 ret = ican3_send_inquiry(mod, INQUIRY_TERMINATION); in ican3_sysfs_show_term()
1747 if (!wait_for_completion_timeout(&mod->termination_comp, HZ)) { in ican3_sysfs_show_term()
1748 netdev_info(mod->ndev, "%s timed out\n", __func__); in ican3_sysfs_show_term()
1752 return snprintf(buf, PAGE_SIZE, "%u\n", mod->termination_enabled); in ican3_sysfs_show_term()
1759 struct ican3_dev *mod = netdev_priv(to_net_dev(dev)); in ican3_sysfs_set_term() local
1766 ret = ican3_set_termination(mod, enable); in ican3_sysfs_set_term()
1777 struct ican3_dev *mod = netdev_priv(to_net_dev(dev)); in ican3_sysfs_show_fwinfo() local
1779 return scnprintf(buf, PAGE_SIZE, "%s\n", mod->fwinfo); in ican3_sysfs_show_fwinfo()
1804 struct ican3_dev *mod; in ican3_probe() local
1819 ndev = alloc_candev(sizeof(*mod), 0); in ican3_probe()
1827 mod = netdev_priv(ndev); in ican3_probe()
1828 mod->ndev = ndev; in ican3_probe()
1829 mod->num = pdata->modno; in ican3_probe()
1830 netif_napi_add(ndev, &mod->napi, ican3_napi, ICAN3_RX_BUFFERS); in ican3_probe()
1831 skb_queue_head_init(&mod->echoq); in ican3_probe()
1832 spin_lock_init(&mod->lock); in ican3_probe()
1833 init_completion(&mod->termination_comp); in ican3_probe()
1834 init_completion(&mod->buserror_comp); in ican3_probe()
1840 mod->free_page = DPM_FREE_START; in ican3_probe()
1846 mod->can.clock.freq = ICAN3_CAN_CLOCK; in ican3_probe()
1847 mod->can.bittiming_const = &ican3_bittiming_const; in ican3_probe()
1848 mod->can.do_set_mode = ican3_set_mode; in ican3_probe()
1849 mod->can.do_get_berr_counter = ican3_get_berr_counter; in ican3_probe()
1850 mod->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES in ican3_probe()
1855 mod->irq = platform_get_irq(pdev, 0); in ican3_probe()
1856 if (mod->irq < 0) { in ican3_probe()
1862 ndev->irq = mod->irq; in ican3_probe()
1872 mod->dpm = ioremap(res->start, resource_size(res)); in ican3_probe()
1873 if (!mod->dpm) { in ican3_probe()
1879 mod->dpmctrl = mod->dpm + DPM_PAGE_SIZE; in ican3_probe()
1889 mod->ctrl = ioremap(res->start, resource_size(res)); in ican3_probe()
1890 if (!mod->ctrl) { in ican3_probe()
1897 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_probe()
1898 ret = request_irq(mod->irq, ican3_irq, IRQF_SHARED, DRV_NAME, mod); in ican3_probe()
1905 napi_enable(&mod->napi); in ican3_probe()
1906 ret = ican3_startup_module(mod); in ican3_probe()
1919 netdev_info(mod->ndev, "module %d: registered CAN device\n", pdata->modno); in ican3_probe()
1923 napi_disable(&mod->napi); in ican3_probe()
1924 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_probe()
1925 free_irq(mod->irq, mod); in ican3_probe()
1927 iounmap(mod->ctrl); in ican3_probe()
1929 iounmap(mod->dpm); in ican3_probe()
1939 struct ican3_dev *mod = netdev_priv(ndev); in ican3_remove() local
1943 napi_disable(&mod->napi); in ican3_remove()
1944 iowrite8(1 << mod->num, &mod->ctrl->int_disable); in ican3_remove()
1945 free_irq(mod->irq, mod); in ican3_remove()
1948 ican3_shutdown_module(mod); in ican3_remove()
1951 iounmap(mod->ctrl); in ican3_remove()
1952 iounmap(mod->dpm); in ican3_remove()