Lines Matching refs:ndev

40 #define  ctucan_netdev_dbg(ndev, args...) \  argument
41 netdev_dbg(ndev, args)
175 static int ctucan_reset(struct net_device *ndev) in ctucan_reset() argument
177 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_reset()
190 netdev_warn(ndev, "device did not leave reset\n"); in ctucan_reset()
205 static int ctucan_set_btr(struct net_device *ndev, struct can_bittiming *bt, bool nominal) in ctucan_set_btr() argument
207 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_set_btr()
214 netdev_err(ndev, "BUG! Cannot set bittiming - CAN is enabled\n"); in ctucan_set_btr()
260 static int ctucan_set_bittiming(struct net_device *ndev) in ctucan_set_bittiming() argument
262 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_set_bittiming()
266 return ctucan_set_btr(ndev, bt, true); in ctucan_set_bittiming()
275 static int ctucan_set_data_bittiming(struct net_device *ndev) in ctucan_set_data_bittiming() argument
277 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_set_data_bittiming()
281 return ctucan_set_btr(ndev, dbt, false); in ctucan_set_data_bittiming()
290 static int ctucan_set_secondary_sample_point(struct net_device *ndev) in ctucan_set_secondary_sample_point() argument
292 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_set_secondary_sample_point()
298 netdev_err(ndev, "BUG! Cannot set SSP - CAN is enabled\n"); in ctucan_set_secondary_sample_point()
308 netdev_warn(ndev, "SSP offset saturated to 127\n"); in ctucan_set_secondary_sample_point()
375 static int ctucan_chip_start(struct net_device *ndev) in ctucan_chip_start() argument
377 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_chip_start()
389 err = ctucan_set_bittiming(ndev); in ctucan_chip_start()
393 err = ctucan_set_data_bittiming(ndev); in ctucan_chip_start()
397 err = ctucan_set_secondary_sample_point(ndev); in ctucan_chip_start()
444 static int ctucan_do_set_mode(struct net_device *ndev, enum can_mode mode) in ctucan_do_set_mode() argument
450 ret = ctucan_reset(ndev); in ctucan_do_set_mode()
453 ret = ctucan_chip_start(ndev); in ctucan_do_set_mode()
455 netdev_err(ndev, "ctucan_chip_start failed!\n"); in ctucan_do_set_mode()
458 netif_wake_queue(ndev); in ctucan_do_set_mode()
596 static netdev_tx_t ctucan_start_xmit(struct sk_buff *skb, struct net_device *ndev) in ctucan_start_xmit() argument
598 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_start_xmit()
604 if (can_dev_dropped_skb(ndev, skb)) in ctucan_start_xmit()
608 netif_stop_queue(ndev); in ctucan_start_xmit()
609 netdev_err(ndev, "BUG!, no TXB free when queue awake!\n"); in ctucan_start_xmit()
614 ctucan_netdev_dbg(ndev, "%s: using TXB#%u\n", __func__, txtb_id); in ctucan_start_xmit()
618 netdev_err(ndev, "BUG! TXNF set but cannot insert frame into TXTB! HW Bug?"); in ctucan_start_xmit()
620 ndev->stats.tx_dropped++; in ctucan_start_xmit()
624 can_put_echo_skb(skb, ndev, txtb_id, 0); in ctucan_start_xmit()
632 netif_stop_queue(ndev); in ctucan_start_xmit()
710 static int ctucan_rx(struct net_device *ndev) in ctucan_rx() argument
712 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_rx()
713 struct net_device_stats *stats = &ndev->stats; in ctucan_rx()
729 skb = alloc_canfd_skb(ndev, &cf); in ctucan_rx()
731 skb = alloc_can_skb(ndev, (struct can_frame **)&cf); in ctucan_rx()
801 static void ctucan_err_interrupt(struct net_device *ndev, u32 isr) in ctucan_err_interrupt() argument
803 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_err_interrupt()
804 struct net_device_stats *stats = &ndev->stats; in ctucan_err_interrupt()
817 …netdev_info(ndev, "%s: ISR = 0x%08x, rxerr %d, txerr %d, error type %lu, pos %lu, ALC id_field %lu… in ctucan_err_interrupt()
824 skb = alloc_can_err_skb(ndev, &cf); in ctucan_err_interrupt()
832 netdev_info(ndev, "state changes from %s to %s\n", in ctucan_err_interrupt()
837 netdev_warn(ndev, in ctucan_err_interrupt()
844 can_bus_off(ndev); in ctucan_err_interrupt()
879 netdev_warn(ndev, "unhandled error state (%d:%s)!\n", in ctucan_err_interrupt()
888 netdev_info(ndev, "arbitration lost\n"); in ctucan_err_interrupt()
898 netdev_info(ndev, "bus error\n"); in ctucan_err_interrupt()
926 struct net_device *ndev = napi->dev; in ctucan_rx_poll() local
927 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_rx_poll()
935 res = ctucan_rx(ndev); in ctucan_rx_poll()
943 struct net_device_stats *stats = &ndev->stats; in ctucan_rx_poll()
947 netdev_info(ndev, "rx_poll: rx fifo overflow\n"); in ctucan_rx_poll()
950 skb = alloc_can_err_skb(ndev, &cf); in ctucan_rx_poll()
980 static void ctucan_rotate_txb_prio(struct net_device *ndev) in ctucan_rotate_txb_prio() argument
982 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_rotate_txb_prio()
986 ctucan_netdev_dbg(ndev, "%s: from 0x%08x to 0x%08x\n", __func__, priv->txb_prio, prio); in ctucan_rotate_txb_prio()
995 static void ctucan_tx_interrupt(struct net_device *ndev) in ctucan_tx_interrupt() argument
997 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_tx_interrupt()
998 struct net_device_stats *stats = &ndev->stats; in ctucan_tx_interrupt()
1019 ctucan_netdev_dbg(ndev, "TXI: TXB#%u: status 0x%x\n", txtb_id, txtb_status); in ctucan_tx_interrupt()
1023 ctucan_netdev_dbg(ndev, "TXT_OK\n"); in ctucan_tx_interrupt()
1024 stats->tx_bytes += can_get_echo_skb(ndev, txtb_id, NULL); in ctucan_tx_interrupt()
1033 netdev_warn(ndev, "TXB in Error state\n"); in ctucan_tx_interrupt()
1034 can_free_echo_skb(ndev, txtb_id, NULL); in ctucan_tx_interrupt()
1042 netdev_warn(ndev, "TXB in Aborted state\n"); in ctucan_tx_interrupt()
1043 can_free_echo_skb(ndev, txtb_id, NULL); in ctucan_tx_interrupt()
1051 netdev_err(ndev, in ctucan_tx_interrupt()
1064 ctucan_rotate_txb_prio(ndev); in ctucan_tx_interrupt()
1086 netif_wake_queue(ndev); in ctucan_tx_interrupt()
1104 struct net_device *ndev = (struct net_device *)dev_id; in ctucan_interrupt() local
1105 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_interrupt()
1119 ctucan_netdev_dbg(ndev, "RXBNEI\n"); in ctucan_interrupt()
1131 ctucan_netdev_dbg(ndev, "TXBHCI\n"); in ctucan_interrupt()
1133 ctucan_tx_interrupt(ndev); in ctucan_interrupt()
1142 ctucan_netdev_dbg(ndev, "some ERR interrupt: clearing 0x%08x\n", icr); in ctucan_interrupt()
1144 ctucan_err_interrupt(ndev, isr); in ctucan_interrupt()
1149 netdev_err(ndev, "%s: stuck interrupt (isr=0x%08x), stopping\n", __func__, isr); in ctucan_interrupt()
1154 netdev_err(ndev, "txb_head=0x%08x txb_tail=0x%08x\n", in ctucan_interrupt()
1159 netdev_err(ndev, "txb[%d] txb status=0x%08x\n", i, status); in ctucan_interrupt()
1177 static void ctucan_chip_stop(struct net_device *ndev) in ctucan_chip_stop() argument
1179 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_chip_stop()
1200 static int ctucan_open(struct net_device *ndev) in ctucan_open() argument
1202 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_open()
1207 netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n", in ctucan_open()
1213 ret = ctucan_reset(ndev); in ctucan_open()
1218 ret = open_candev(ndev); in ctucan_open()
1220 netdev_warn(ndev, "open_candev failed!\n"); in ctucan_open()
1224 ret = request_irq(ndev->irq, ctucan_interrupt, priv->irq_flags, ndev->name, ndev); in ctucan_open()
1226 netdev_err(ndev, "irq allocation for CAN failed\n"); in ctucan_open()
1230 ret = ctucan_chip_start(ndev); in ctucan_open()
1232 netdev_err(ndev, "ctucan_chip_start failed!\n"); in ctucan_open()
1236 netdev_info(ndev, "ctu_can_fd device registered\n"); in ctucan_open()
1238 netif_start_queue(ndev); in ctucan_open()
1243 free_irq(ndev->irq, ndev); in ctucan_open()
1245 close_candev(ndev); in ctucan_open()
1259 static int ctucan_close(struct net_device *ndev) in ctucan_close() argument
1261 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_close()
1263 netif_stop_queue(ndev); in ctucan_close()
1265 ctucan_chip_stop(ndev); in ctucan_close()
1266 free_irq(ndev->irq, ndev); in ctucan_close()
1267 close_candev(ndev); in ctucan_close()
1282 static int ctucan_get_berr_counter(const struct net_device *ndev, struct can_berr_counter *bec) in ctucan_get_berr_counter() argument
1284 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_get_berr_counter()
1289 netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n", __func__, ret); in ctucan_get_berr_counter()
1313 struct net_device *ndev = dev_get_drvdata(dev); in ctucan_suspend() local
1314 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_suspend()
1316 if (netif_running(ndev)) { in ctucan_suspend()
1317 netif_stop_queue(ndev); in ctucan_suspend()
1318 netif_device_detach(ndev); in ctucan_suspend()
1329 struct net_device *ndev = dev_get_drvdata(dev); in ctucan_resume() local
1330 struct ctucan_priv *priv = netdev_priv(ndev); in ctucan_resume()
1334 if (netif_running(ndev)) { in ctucan_resume()
1335 netif_device_attach(ndev); in ctucan_resume()
1336 netif_start_queue(ndev); in ctucan_resume()
1345 void (*set_drvdata_fnc)(struct device *dev, struct net_device *ndev)) in ctucan_probe_common() argument
1348 struct net_device *ndev; in ctucan_probe_common() local
1352 ndev = alloc_candev(sizeof(struct ctucan_priv), ntxbufs); in ctucan_probe_common()
1353 if (!ndev) in ctucan_probe_common()
1356 priv = netdev_priv(ndev); in ctucan_probe_common()
1380 ndev->irq = irq; in ctucan_probe_common()
1381 ndev->flags |= IFF_ECHO; /* We support local echo */ in ctucan_probe_common()
1384 set_drvdata_fnc(dev, ndev); in ctucan_probe_common()
1385 SET_NETDEV_DEV(ndev, dev); in ctucan_probe_common()
1386 ndev->netdev_ops = &ctucan_netdev_ops; in ctucan_probe_common()
1387 ndev->ethtool_ops = &ctucan_ethtool_ops; in ctucan_probe_common()
1407 netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n", in ctucan_probe_common()
1418 netdev_err(ndev, "CTU_CAN_FD signature not found\n"); in ctucan_probe_common()
1424 ret = ctucan_reset(ndev); in ctucan_probe_common()
1430 netif_napi_add(ndev, &priv->napi, ctucan_rx_poll); in ctucan_probe_common()
1432 ret = register_candev(ndev); in ctucan_probe_common()
1440 netdev_dbg(ndev, "mem_base=0x%p irq=%d clock=%d, no. of txt buffers:%d\n", in ctucan_probe_common()
1441 priv->mem_base, ndev->irq, priv->can.clock.freq, priv->ntxbufs); in ctucan_probe_common()
1452 free_candev(ndev); in ctucan_probe_common()