Lines Matching refs:netdev

175 static void es58x_set_skb_timestamp(struct net_device *netdev,  in es58x_set_skb_timestamp()  argument
178 struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev; in es58x_set_skb_timestamp()
259 static bool es58x_is_can_state_active(struct net_device *netdev) in es58x_is_can_state_active() argument
261 return es58x_priv(netdev)->can.state < CAN_STATE_BUS_OFF; in es58x_is_can_state_active()
294 static void es58x_can_free_echo_skb_tail(struct net_device *netdev) in es58x_can_free_echo_skb_tail() argument
296 struct es58x_priv *priv = es58x_priv(netdev); in es58x_can_free_echo_skb_tail()
300 can_free_echo_skb(netdev, priv->tx_tail & fifo_mask, &frame_len); in es58x_can_free_echo_skb_tail()
301 netdev_completed_queue(netdev, 1, frame_len); in es58x_can_free_echo_skb_tail()
305 netdev->stats.tx_dropped++; in es58x_can_free_echo_skb_tail()
320 static int es58x_can_get_echo_skb_recovery(struct net_device *netdev, in es58x_can_get_echo_skb_recovery() argument
323 struct es58x_priv *priv = es58x_priv(netdev); in es58x_can_get_echo_skb_recovery()
326 netdev->stats.tx_errors++; in es58x_can_get_echo_skb_recovery()
329 netdev_warn(netdev, in es58x_can_get_echo_skb_recovery()
337 netdev_warn(netdev, in es58x_can_get_echo_skb_recovery()
342 netdev_err(netdev, in es58x_can_get_echo_skb_recovery()
347 netdev_warn(netdev, in es58x_can_get_echo_skb_recovery()
354 es58x_can_free_echo_skb_tail(netdev); in es58x_can_get_echo_skb_recovery()
382 int es58x_can_get_echo_skb(struct net_device *netdev, u32 rcv_packet_idx, in es58x_can_get_echo_skb() argument
385 struct es58x_priv *priv = es58x_priv(netdev); in es58x_can_get_echo_skb()
391 if (!netif_running(netdev)) { in es58x_can_get_echo_skb()
393 netdev_info(netdev, in es58x_can_get_echo_skb()
395 __func__, netdev->name, pkts); in es58x_can_get_echo_skb()
396 netdev->stats.tx_dropped += pkts; in es58x_can_get_echo_skb()
398 } else if (!es58x_is_can_state_active(netdev)) { in es58x_can_get_echo_skb()
400 netdev_dbg(netdev, in es58x_can_get_echo_skb()
410 netdev_warn(netdev, in es58x_can_get_echo_skb()
413 netdev->stats.tx_dropped += pkts; in es58x_can_get_echo_skb()
418 if (es58x_can_get_echo_skb_recovery(netdev, rcv_packet_idx) < 0) { in es58x_can_get_echo_skb()
420 netdev_warn(netdev, in es58x_can_get_echo_skb()
430 netdev_err(netdev, in es58x_can_get_echo_skb()
433 netdev->stats.tx_dropped += pkts_drop; in es58x_can_get_echo_skb()
443 es58x_set_skb_timestamp(netdev, skb, tstamps[i]); in es58x_can_get_echo_skb()
445 netdev->stats.tx_bytes += can_get_echo_skb(netdev, skb_idx, in es58x_can_get_echo_skb()
452 netdev_completed_queue(netdev, pkts, rx_total_frame_len); in es58x_can_get_echo_skb()
453 netdev->stats.tx_packets += pkts; in es58x_can_get_echo_skb()
457 netif_wake_queue(netdev); in es58x_can_get_echo_skb()
471 static void es58x_can_reset_echo_fifo(struct net_device *netdev) in es58x_can_reset_echo_fifo() argument
473 struct es58x_priv *priv = es58x_priv(netdev); in es58x_can_reset_echo_fifo()
479 netdev_reset_queue(netdev); in es58x_can_reset_echo_fifo()
492 static void es58x_flush_pending_tx_msg(struct net_device *netdev) in es58x_flush_pending_tx_msg() argument
494 struct es58x_priv *priv = es58x_priv(netdev); in es58x_flush_pending_tx_msg()
498 netdev_warn(netdev, "%s: dropping %d TX messages\n", in es58x_flush_pending_tx_msg()
500 netdev->stats.tx_dropped += priv->tx_can_msg_cnt; in es58x_flush_pending_tx_msg()
507 can_free_echo_skb(netdev, priv->tx_head & fifo_mask, in es58x_flush_pending_tx_msg()
509 netdev_completed_queue(netdev, 1, frame_len); in es58x_flush_pending_tx_msg()
533 int es58x_tx_ack_msg(struct net_device *netdev, u16 tx_free_entries, in es58x_tx_ack_msg() argument
536 struct es58x_priv *priv = es58x_priv(netdev); in es58x_tx_ack_msg()
540 netdev_err(netdev, in es58x_tx_ack_msg()
545 netif_stop_queue(netdev); in es58x_tx_ack_msg()
548 return es58x_rx_cmd_ret_u32(netdev, ES58X_RET_TYPE_TX_MSG, in es58x_tx_ack_msg()
569 int es58x_rx_can_msg(struct net_device *netdev, u64 timestamp, const u8 *data, in es58x_rx_can_msg() argument
579 netdev_err(netdev, in es58x_rx_can_msg()
587 skb = alloc_canfd_skb(netdev, &cfd); in es58x_rx_can_msg()
590 skb = alloc_can_skb(netdev, &ccf); in es58x_rx_can_msg()
594 netdev->stats.rx_dropped++; in es58x_rx_can_msg()
608 can_frame_set_cc_len(ccf, dlc, es58x_priv(netdev)->can.ctrlmode); in es58x_rx_can_msg()
615 netdev->stats.rx_packets++; in es58x_rx_can_msg()
616 netdev->stats.rx_bytes += len; in es58x_rx_can_msg()
618 es58x_set_skb_timestamp(netdev, skb, timestamp); in es58x_rx_can_msg()
621 es58x_priv(netdev)->err_passive_before_rtx_success = 0; in es58x_rx_can_msg()
658 int es58x_rx_err_msg(struct net_device *netdev, enum es58x_err error, in es58x_rx_err_msg() argument
661 struct es58x_priv *priv = es58x_priv(netdev); in es58x_rx_err_msg()
662 struct can_priv *can = netdev_priv(netdev); in es58x_rx_err_msg()
668 if (!netif_running(netdev)) { in es58x_rx_err_msg()
670 netdev_info(netdev, "%s: %s is down, dropping packet\n", in es58x_rx_err_msg()
671 __func__, netdev->name); in es58x_rx_err_msg()
672 netdev->stats.rx_dropped++; in es58x_rx_err_msg()
677 netdev_err(netdev, "%s: Both error and event are zero\n", in es58x_rx_err_msg()
682 skb = alloc_can_err_skb(netdev, &cf); in es58x_rx_err_msg()
690 netdev_dbg(netdev, "Error BITSTUFF\n"); in es58x_rx_err_msg()
697 netdev_dbg(netdev, "Error FORMAT\n"); in es58x_rx_err_msg()
704 netdev_dbg(netdev, "Error ACK\n"); in es58x_rx_err_msg()
711 netdev_dbg(netdev, "Error BIT\n"); in es58x_rx_err_msg()
718 netdev_dbg(netdev, "Error CRC\n"); in es58x_rx_err_msg()
725 netdev_dbg(netdev, in es58x_rx_err_msg()
733 netdev_dbg(netdev, in es58x_rx_err_msg()
741 netdev_dbg(netdev, "Error OVERLOAD\n"); in es58x_rx_err_msg()
748 netdev_dbg(netdev, "Unspecified error\n"); in es58x_rx_err_msg()
755 netdev_err(netdev, in es58x_rx_err_msg()
769 netdev_err(netdev, in es58x_rx_err_msg()
774 netdev_dbg(netdev, "Event CAN BUS ACTIVE\n"); in es58x_rx_err_msg()
782 netdev_dbg(netdev, "Event CAN BUS PASSIVE\n"); in es58x_rx_err_msg()
800 netdev_dbg(netdev, "Event CAN BUS WARNING\n"); in es58x_rx_err_msg()
816 netdev_dbg(netdev, "Event CAN BUS OFF\n"); in es58x_rx_err_msg()
820 netif_stop_queue(netdev); in es58x_rx_err_msg()
823 can_bus_off(netdev); in es58x_rx_err_msg()
824 ret = can->do_set_mode(netdev, CAN_MODE_STOP); in es58x_rx_err_msg()
830 netdev_warn(netdev, in es58x_rx_err_msg()
843 netdev_err(netdev, in es58x_rx_err_msg()
861 es58x_set_skb_timestamp(netdev, skb, timestamp); in es58x_rx_err_msg()
867 netdev_info(netdev, in es58x_rx_err_msg()
870 return es58x_rx_err_msg(netdev, ES58X_ERR_OK, in es58x_rx_err_msg()
970 int es58x_rx_cmd_ret_u32(struct net_device *netdev, in es58x_rx_cmd_ret_u32() argument
974 struct es58x_priv *priv = es58x_priv(netdev); in es58x_rx_cmd_ret_u32()
982 es58x_can_reset_echo_fifo(netdev); in es58x_rx_cmd_ret_u32()
984 netif_wake_queue(netdev); in es58x_rx_cmd_ret_u32()
985 netdev_info(netdev, in es58x_rx_cmd_ret_u32()
994 netdev_vdbg(netdev, "%s: OK\n", ret_desc); in es58x_rx_cmd_ret_u32()
998 netdev_dbg(netdev, "%s: OK\n", ret_desc); in es58x_rx_cmd_ret_u32()
1007 netdev_warn(netdev, in es58x_rx_cmd_ret_u32()
1010 ret = ops->disable_channel(es58x_priv(netdev)); in es58x_rx_cmd_ret_u32()
1013 return ops->enable_channel(es58x_priv(netdev)); in es58x_rx_cmd_ret_u32()
1016 netdev_info(netdev, in es58x_rx_cmd_ret_u32()
1020 netdev_err(netdev, in es58x_rx_cmd_ret_u32()
1025 netdev_err(netdev, "%s: device ran out of memory\n", ret_desc); in es58x_rx_cmd_ret_u32()
1029 netdev_warn(netdev, in es58x_rx_cmd_ret_u32()
1035 netdev_warn(netdev, in es58x_rx_cmd_ret_u32()
1041 netdev_err(netdev, "%s: command timed out\n", ret_desc); in es58x_rx_cmd_ret_u32()
1045 netdev_warn(netdev, "%s: fifo is full\n", ret_desc); in es58x_rx_cmd_ret_u32()
1049 netdev_err(netdev, "%s: bad configuration\n", ret_desc); in es58x_rx_cmd_ret_u32()
1053 netdev_err(netdev, "%s: no resource available\n", ret_desc); in es58x_rx_cmd_ret_u32()
1057 netdev_err(netdev, "%s returned unknown value: 0x%08X\n", in es58x_rx_cmd_ret_u32()
1078 if (es58x_dev->netdev[i]) in es58x_increment_rx_errors()
1079 es58x_dev->netdev[i]->stats.rx_errors++; in es58x_increment_rx_errors()
1129 if (es58x_dev->netdev[i]) in es58x_handle_urb_cmd()
1130 netif_device_detach(es58x_dev->netdev[i]); in es58x_handle_urb_cmd()
1467 if (es58x_dev->netdev[i]) in es58x_read_bulk_callback()
1468 netif_device_detach(es58x_dev->netdev[i]); in es58x_read_bulk_callback()
1492 struct net_device *netdev = urb->context; in es58x_write_bulk_callback() local
1493 struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev; in es58x_write_bulk_callback()
1501 netdev_err(netdev, "%s: error %pe\n", in es58x_write_bulk_callback()
1509 netdev_dbg(netdev, "%s: error %pe\n", in es58x_write_bulk_callback()
1518 netdev_info(netdev, "%s: error %pe\n", in es58x_write_bulk_callback()
1626 struct net_device *netdev) in es58x_submit_urb() argument
1631 urb->context = netdev; in es58x_submit_urb()
1635 netdev_err(netdev, "%s: USB send urb failure: %pe\n", in es58x_submit_urb()
1664 struct net_device *netdev; in es58x_send_msg() local
1670 netdev = es58x_dev->netdev[0]; /* Default to first channel */ in es58x_send_msg()
1672 netdev = es58x_dev->netdev[channel_idx]; in es58x_send_msg()
1689 return es58x_submit_urb(es58x_dev, urb, netdev); in es58x_send_msg()
1779 static int es58x_open(struct net_device *netdev) in es58x_open() argument
1781 struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev; in es58x_open()
1794 ret = open_candev(netdev); in es58x_open()
1798 ret = es58x_dev->ops->enable_channel(es58x_priv(netdev)); in es58x_open()
1803 netif_start_queue(netdev); in es58x_open()
1810 netdev_err(netdev, "%s: Could not open the network device: %pe\n", in es58x_open()
1826 static int es58x_stop(struct net_device *netdev) in es58x_stop() argument
1828 struct es58x_priv *priv = es58x_priv(netdev); in es58x_stop()
1832 netif_stop_queue(netdev); in es58x_stop()
1838 es58x_can_reset_echo_fifo(netdev); in es58x_stop()
1839 close_candev(netdev); in es58x_stop()
1841 es58x_flush_pending_tx_msg(netdev); in es58x_stop()
1859 static int es58x_xmit_commit(struct net_device *netdev) in es58x_xmit_commit() argument
1861 struct es58x_priv *priv = es58x_priv(netdev); in es58x_xmit_commit()
1864 if (!es58x_is_can_state_active(netdev)) in es58x_xmit_commit()
1868 netif_stop_queue(netdev); in es58x_xmit_commit()
1870 ret = es58x_submit_urb(priv->es58x_dev, priv->tx_urb, netdev); in es58x_xmit_commit()
1910 struct net_device *netdev) in es58x_start_xmit() argument
1912 struct es58x_priv *priv = es58x_priv(netdev); in es58x_start_xmit()
1917 if (can_dev_dropped_skb(netdev, skb)) { in es58x_start_xmit()
1925 ret = es58x_xmit_commit(netdev); in es58x_start_xmit()
1945 ret = can_put_echo_skb(skb, netdev, in es58x_start_xmit()
1950 netdev_sent_queue(netdev, frame_len); in es58x_start_xmit()
1957 ret = es58x_xmit_commit(netdev); in es58x_start_xmit()
1966 netdev->stats.tx_dropped++; in es58x_start_xmit()
1968 netdev_warn(netdev, "%s: send message failure: %pe\n", in es58x_start_xmit()
1970 netdev->stats.tx_errors++; in es58x_start_xmit()
1971 es58x_flush_pending_tx_msg(netdev); in es58x_start_xmit()
1998 static int es58x_set_mode(struct net_device *netdev, enum can_mode mode) in es58x_set_mode() argument
2000 struct es58x_priv *priv = es58x_priv(netdev); in es58x_set_mode()
2009 return es58x_open(netdev); in es58x_set_mode()
2085 struct net_device *netdev; in es58x_init_netdev() local
2089 netdev = alloc_candev(sizeof(struct es58x_priv), in es58x_init_netdev()
2091 if (!netdev) { in es58x_init_netdev()
2095 SET_NETDEV_DEV(netdev, dev); in es58x_init_netdev()
2096 es58x_dev->netdev[channel_idx] = netdev; in es58x_init_netdev()
2097 ret = es58x_init_priv(es58x_dev, es58x_priv(netdev), channel_idx); in es58x_init_netdev()
2100 SET_NETDEV_DEVLINK_PORT(netdev, &es58x_priv(netdev)->devlink_port); in es58x_init_netdev()
2102 netdev->netdev_ops = &es58x_netdev_ops; in es58x_init_netdev()
2103 netdev->ethtool_ops = &es58x_ethtool_ops; in es58x_init_netdev()
2104 netdev->flags |= IFF_ECHO; /* We support local echo */ in es58x_init_netdev()
2105 netdev->dev_port = channel_idx; in es58x_init_netdev()
2107 ret = register_candev(netdev); in es58x_init_netdev()
2111 netdev_queue_set_dql_min_limit(netdev_get_tx_queue(netdev, 0), in es58x_init_netdev()
2117 devlink_port_unregister(&es58x_priv(netdev)->devlink_port); in es58x_init_netdev()
2119 es58x_dev->netdev[channel_idx] = NULL; in es58x_init_netdev()
2120 free_candev(netdev); in es58x_init_netdev()
2133 struct net_device *netdev = es58x_dev->netdev[i]; in es58x_free_netdevs() local
2135 if (!netdev) in es58x_free_netdevs()
2137 unregister_candev(netdev); in es58x_free_netdevs()
2138 devlink_port_unregister(&es58x_priv(netdev)->devlink_port); in es58x_free_netdevs()
2139 es58x_dev->netdev[i] = NULL; in es58x_free_netdevs()
2140 free_candev(netdev); in es58x_free_netdevs()