cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

es58x_core.c (65079B)


      1// SPDX-License-Identifier: GPL-2.0
      2
      3/* Driver for ETAS GmbH ES58X USB CAN(-FD) Bus Interfaces.
      4 *
      5 * File es58x_core.c: Core logic to manage the network devices and the
      6 * USB interface.
      7 *
      8 * Copyright (c) 2019 Robert Bosch Engineering and Business Solutions. All rights reserved.
      9 * Copyright (c) 2020 ETAS K.K.. All rights reserved.
     10 * Copyright (c) 2020, 2021 Vincent Mailhol <mailhol.vincent@wanadoo.fr>
     11 */
     12
     13#include <linux/kernel.h>
     14#include <linux/module.h>
     15#include <linux/usb.h>
     16#include <linux/crc16.h>
     17#include <asm/unaligned.h>
     18
     19#include "es58x_core.h"
     20
     21#define DRV_VERSION "1.00"
     22MODULE_AUTHOR("Vincent Mailhol <mailhol.vincent@wanadoo.fr>");
     23MODULE_AUTHOR("Arunachalam Santhanam <arunachalam.santhanam@in.bosch.com>");
     24MODULE_DESCRIPTION("Socket CAN driver for ETAS ES58X USB adapters");
     25MODULE_VERSION(DRV_VERSION);
     26MODULE_LICENSE("GPL v2");
     27
     28#define ES58X_MODULE_NAME "etas_es58x"
     29#define ES58X_VENDOR_ID 0x108C
     30#define ES581_4_PRODUCT_ID 0x0159
     31#define ES582_1_PRODUCT_ID 0x0168
     32#define ES584_1_PRODUCT_ID 0x0169
     33
     34/* ES58X FD has some interface protocols unsupported by this driver. */
     35#define ES58X_FD_INTERFACE_PROTOCOL 0
     36
     37/* Table of devices which work with this driver. */
     38static const struct usb_device_id es58x_id_table[] = {
     39	{
     40		/* ETAS GmbH ES581.4 USB dual-channel CAN Bus Interface module. */
     41		USB_DEVICE(ES58X_VENDOR_ID, ES581_4_PRODUCT_ID),
     42		.driver_info = ES58X_DUAL_CHANNEL
     43	}, {
     44		/* ETAS GmbH ES582.1 USB dual-channel CAN FD Bus Interface module. */
     45		USB_DEVICE_INTERFACE_PROTOCOL(ES58X_VENDOR_ID, ES582_1_PRODUCT_ID,
     46					      ES58X_FD_INTERFACE_PROTOCOL),
     47		.driver_info = ES58X_DUAL_CHANNEL | ES58X_FD_FAMILY
     48	}, {
     49		/* ETAS GmbH ES584.1 USB single-channel CAN FD Bus Interface module. */
     50		USB_DEVICE_INTERFACE_PROTOCOL(ES58X_VENDOR_ID, ES584_1_PRODUCT_ID,
     51					      ES58X_FD_INTERFACE_PROTOCOL),
     52		.driver_info = ES58X_FD_FAMILY
     53	}, {
     54		/* Terminating entry */
     55	}
     56};
     57
     58MODULE_DEVICE_TABLE(usb, es58x_id_table);
     59
     60#define es58x_print_hex_dump(buf, len)					\
     61	print_hex_dump(KERN_DEBUG,					\
     62		       ES58X_MODULE_NAME " " __stringify(buf) ": ",	\
     63		       DUMP_PREFIX_NONE, 16, 1, buf, len, false)
     64
     65#define es58x_print_hex_dump_debug(buf, len)				 \
     66	print_hex_dump_debug(ES58X_MODULE_NAME " " __stringify(buf) ": ",\
     67			     DUMP_PREFIX_NONE, 16, 1, buf, len, false)
     68
     69/* The last two bytes of an ES58X command is a CRC16. The first two
     70 * bytes (the start of frame) are skipped and the CRC calculation
     71 * starts on the third byte.
     72 */
     73#define ES58X_CRC_CALC_OFFSET sizeof_field(union es58x_urb_cmd, sof)
     74
     75/**
     76 * es58x_calculate_crc() - Compute the crc16 of a given URB.
     77 * @urb_cmd: The URB command for which we want to calculate the CRC.
     78 * @urb_len: Length of @urb_cmd. Must be at least bigger than 4
     79 *	(ES58X_CRC_CALC_OFFSET + sizeof(crc))
     80 *
     81 * Return: crc16 value.
     82 */
     83static u16 es58x_calculate_crc(const union es58x_urb_cmd *urb_cmd, u16 urb_len)
     84{
     85	u16 crc;
     86	ssize_t len = urb_len - ES58X_CRC_CALC_OFFSET - sizeof(crc);
     87
     88	crc = crc16(0, &urb_cmd->raw_cmd[ES58X_CRC_CALC_OFFSET], len);
     89	return crc;
     90}
     91
     92/**
     93 * es58x_get_crc() - Get the CRC value of a given URB.
     94 * @urb_cmd: The URB command for which we want to get the CRC.
     95 * @urb_len: Length of @urb_cmd. Must be at least bigger than 4
     96 *	(ES58X_CRC_CALC_OFFSET + sizeof(crc))
     97 *
     98 * Return: crc16 value.
     99 */
    100static u16 es58x_get_crc(const union es58x_urb_cmd *urb_cmd, u16 urb_len)
    101{
    102	u16 crc;
    103	const __le16 *crc_addr;
    104
    105	crc_addr = (__le16 *)&urb_cmd->raw_cmd[urb_len - sizeof(crc)];
    106	crc = get_unaligned_le16(crc_addr);
    107	return crc;
    108}
    109
    110/**
    111 * es58x_set_crc() - Set the CRC value of a given URB.
    112 * @urb_cmd: The URB command for which we want to get the CRC.
    113 * @urb_len: Length of @urb_cmd. Must be at least bigger than 4
    114 *	(ES58X_CRC_CALC_OFFSET + sizeof(crc))
    115 */
    116static void es58x_set_crc(union es58x_urb_cmd *urb_cmd, u16 urb_len)
    117{
    118	u16 crc;
    119	__le16 *crc_addr;
    120
    121	crc = es58x_calculate_crc(urb_cmd, urb_len);
    122	crc_addr = (__le16 *)&urb_cmd->raw_cmd[urb_len - sizeof(crc)];
    123	put_unaligned_le16(crc, crc_addr);
    124}
    125
    126/**
    127 * es58x_check_crc() - Validate the CRC value of a given URB.
    128 * @es58x_dev: ES58X device.
    129 * @urb_cmd: The URB command for which we want to check the CRC.
    130 * @urb_len: Length of @urb_cmd. Must be at least bigger than 4
    131 *	(ES58X_CRC_CALC_OFFSET + sizeof(crc))
    132 *
    133 * Return: zero on success, -EBADMSG if the CRC check fails.
    134 */
    135static int es58x_check_crc(struct es58x_device *es58x_dev,
    136			   const union es58x_urb_cmd *urb_cmd, u16 urb_len)
    137{
    138	u16 calculated_crc = es58x_calculate_crc(urb_cmd, urb_len);
    139	u16 expected_crc = es58x_get_crc(urb_cmd, urb_len);
    140
    141	if (expected_crc != calculated_crc) {
    142		dev_err_ratelimited(es58x_dev->dev,
    143				    "%s: Bad CRC, urb_len: %d\n",
    144				    __func__, urb_len);
    145		return -EBADMSG;
    146	}
    147
    148	return 0;
    149}
    150
    151/**
    152 * es58x_timestamp_to_ns() - Convert a timestamp value received from a
    153 *	ES58X device to nanoseconds.
    154 * @timestamp: Timestamp received from a ES58X device.
    155 *
    156 * The timestamp received from ES58X is expressed in multiples of 0.5
    157 * micro seconds. This function converts it in to nanoseconds.
    158 *
    159 * Return: Timestamp value in nanoseconds.
    160 */
    161static u64 es58x_timestamp_to_ns(u64 timestamp)
    162{
    163	const u64 es58x_timestamp_ns_mult_coef = 500ULL;
    164
    165	return es58x_timestamp_ns_mult_coef * timestamp;
    166}
    167
    168/**
    169 * es58x_set_skb_timestamp() - Set the hardware timestamp of an skb.
    170 * @netdev: CAN network device.
    171 * @skb: socket buffer of a CAN message.
    172 * @timestamp: Timestamp received from an ES58X device.
    173 *
    174 * Used for both received and echo messages.
    175 */
    176static void es58x_set_skb_timestamp(struct net_device *netdev,
    177				    struct sk_buff *skb, u64 timestamp)
    178{
    179	struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev;
    180	struct skb_shared_hwtstamps *hwts;
    181
    182	hwts = skb_hwtstamps(skb);
    183	/* Ignoring overflow (overflow on 64 bits timestamp with nano
    184	 * second precision would occur after more than 500 years).
    185	 */
    186	hwts->hwtstamp = ns_to_ktime(es58x_timestamp_to_ns(timestamp) +
    187				     es58x_dev->realtime_diff_ns);
    188}
    189
    190/**
    191 * es58x_rx_timestamp() - Handle a received timestamp.
    192 * @es58x_dev: ES58X device.
    193 * @timestamp: Timestamp received from a ES58X device.
    194 *
    195 * Calculate the difference between the ES58X device and the kernel
    196 * internal clocks. This difference will be later used as an offset to
    197 * convert the timestamps of RX and echo messages to match the kernel
    198 * system time (e.g. convert to UNIX time).
    199 */
    200void es58x_rx_timestamp(struct es58x_device *es58x_dev, u64 timestamp)
    201{
    202	u64 ktime_real_ns = ktime_get_real_ns();
    203	u64 device_timestamp = es58x_timestamp_to_ns(timestamp);
    204
    205	dev_dbg(es58x_dev->dev, "%s: request round-trip time: %llu ns\n",
    206		__func__, ktime_real_ns - es58x_dev->ktime_req_ns);
    207
    208	es58x_dev->realtime_diff_ns =
    209	    (es58x_dev->ktime_req_ns + ktime_real_ns) / 2 - device_timestamp;
    210	es58x_dev->ktime_req_ns = 0;
    211
    212	dev_dbg(es58x_dev->dev,
    213		"%s: Device timestamp: %llu, diff with kernel: %llu\n",
    214		__func__, device_timestamp, es58x_dev->realtime_diff_ns);
    215}
    216
    217/**
    218 * es58x_set_realtime_diff_ns() - Calculate difference between the
    219 *	clocks of the ES58X device and the kernel
    220 * @es58x_dev: ES58X device.
    221 *
    222 * Request a timestamp from the ES58X device. Once the answer is
    223 * received, the timestamp difference will be set by the callback
    224 * function es58x_rx_timestamp().
    225 *
    226 * Return: zero on success, errno when any error occurs.
    227 */
    228static int es58x_set_realtime_diff_ns(struct es58x_device *es58x_dev)
    229{
    230	if (es58x_dev->ktime_req_ns) {
    231		dev_warn(es58x_dev->dev,
    232			 "%s: Previous request to set timestamp has not completed yet\n",
    233			 __func__);
    234		return -EBUSY;
    235	}
    236
    237	es58x_dev->ktime_req_ns = ktime_get_real_ns();
    238	return es58x_dev->ops->get_timestamp(es58x_dev);
    239}
    240
    241/**
    242 * es58x_is_can_state_active() - Is the network device in an active
    243 *	CAN state?
    244 * @netdev: CAN network device.
    245 *
    246 * The device is considered active if it is able to send or receive
    247 * CAN frames, that is to say if it is in any of
    248 * CAN_STATE_ERROR_ACTIVE, CAN_STATE_ERROR_WARNING or
    249 * CAN_STATE_ERROR_PASSIVE states.
    250 *
    251 * Caution: when recovering from a bus-off,
    252 * net/core/dev.c#can_restart() will call
    253 * net/core/dev.c#can_flush_echo_skb() without using any kind of
    254 * locks. For this reason, it is critical to guarantee that no TX or
    255 * echo operations (i.e. any access to priv->echo_skb[]) can be done
    256 * while this function is returning false.
    257 *
    258 * Return: true if the device is active, else returns false.
    259 */
    260static bool es58x_is_can_state_active(struct net_device *netdev)
    261{
    262	return es58x_priv(netdev)->can.state < CAN_STATE_BUS_OFF;
    263}
    264
    265/**
    266 * es58x_is_echo_skb_threshold_reached() - Determine the limit of how
    267 *	many skb slots can be taken before we should stop the network
    268 *	queue.
    269 * @priv: ES58X private parameters related to the network device.
    270 *
    271 * We need to save enough free skb slots in order to be able to do
    272 * bulk send. This function can be used to determine when to wake or
    273 * stop the network queue in regard to the number of skb slots already
    274 * taken if the echo FIFO.
    275 *
    276 * Return: boolean.
    277 */
    278static bool es58x_is_echo_skb_threshold_reached(struct es58x_priv *priv)
    279{
    280	u32 num_echo_skb =  priv->tx_head - priv->tx_tail;
    281	u32 threshold = priv->can.echo_skb_max -
    282		priv->es58x_dev->param->tx_bulk_max + 1;
    283
    284	return num_echo_skb >= threshold;
    285}
    286
    287/**
    288 * es58x_can_free_echo_skb_tail() - Remove the oldest echo skb of the
    289 *	echo FIFO.
    290 * @netdev: CAN network device.
    291 *
    292 * Naming convention: the tail is the beginning of the FIFO, i.e. the
    293 * first skb to have entered the FIFO.
    294 */
    295static void es58x_can_free_echo_skb_tail(struct net_device *netdev)
    296{
    297	struct es58x_priv *priv = es58x_priv(netdev);
    298	u16 fifo_mask = priv->es58x_dev->param->fifo_mask;
    299	unsigned int frame_len = 0;
    300
    301	can_free_echo_skb(netdev, priv->tx_tail & fifo_mask, &frame_len);
    302	netdev_completed_queue(netdev, 1, frame_len);
    303
    304	priv->tx_tail++;
    305
    306	netdev->stats.tx_dropped++;
    307}
    308
    309/**
    310 * es58x_can_get_echo_skb_recovery() - Try to re-sync the echo FIFO.
    311 * @netdev: CAN network device.
    312 * @rcv_packet_idx: Index
    313 *
    314 * This function should not be called under normal circumstances. In
    315 * the unlikely case that one or several URB packages get dropped by
    316 * the device, the index will get out of sync. Try to recover by
    317 * dropping the echo skb packets with older indexes.
    318 *
    319 * Return: zero if recovery was successful, -EINVAL otherwise.
    320 */
    321static int es58x_can_get_echo_skb_recovery(struct net_device *netdev,
    322					   u32 rcv_packet_idx)
    323{
    324	struct es58x_priv *priv = es58x_priv(netdev);
    325	int ret = 0;
    326
    327	netdev->stats.tx_errors++;
    328
    329	if (net_ratelimit())
    330		netdev_warn(netdev,
    331			    "Bad echo packet index: %u. First index: %u, end index %u, num_echo_skb: %02u/%02u\n",
    332			    rcv_packet_idx, priv->tx_tail, priv->tx_head,
    333			    priv->tx_head - priv->tx_tail,
    334			    priv->can.echo_skb_max);
    335
    336	if ((s32)(rcv_packet_idx - priv->tx_tail) < 0) {
    337		if (net_ratelimit())
    338			netdev_warn(netdev,
    339				    "Received echo index is from the past. Ignoring it\n");
    340		ret = -EINVAL;
    341	} else if ((s32)(rcv_packet_idx - priv->tx_head) >= 0) {
    342		if (net_ratelimit())
    343			netdev_err(netdev,
    344				   "Received echo index is from the future. Ignoring it\n");
    345		ret = -EINVAL;
    346	} else {
    347		if (net_ratelimit())
    348			netdev_warn(netdev,
    349				    "Recovery: dropping %u echo skb from index %u to %u\n",
    350				    rcv_packet_idx - priv->tx_tail,
    351				    priv->tx_tail, rcv_packet_idx - 1);
    352		while (priv->tx_tail != rcv_packet_idx) {
    353			if (priv->tx_tail == priv->tx_head)
    354				return -EINVAL;
    355			es58x_can_free_echo_skb_tail(netdev);
    356		}
    357	}
    358	return ret;
    359}
    360
    361/**
    362 * es58x_can_get_echo_skb() - Get the skb from the echo FIFO and loop
    363 *	it back locally.
    364 * @netdev: CAN network device.
    365 * @rcv_packet_idx: Index of the first packet received from the device.
    366 * @tstamps: Array of hardware timestamps received from a ES58X device.
    367 * @pkts: Number of packets (and so, length of @tstamps).
    368 *
    369 * Callback function for when we receive a self reception
    370 * acknowledgment.  Retrieves the skb from the echo FIFO, sets its
    371 * hardware timestamp (the actual time it was sent) and loops it back
    372 * locally.
    373 *
    374 * The device has to be active (i.e. network interface UP and not in
    375 * bus off state or restarting).
    376 *
    377 * Packet indexes must be consecutive (i.e. index of first packet is
    378 * @rcv_packet_idx, index of second packet is @rcv_packet_idx + 1 and
    379 * index of last packet is @rcv_packet_idx + @pkts - 1).
    380 *
    381 * Return: zero on success.
    382 */
    383int es58x_can_get_echo_skb(struct net_device *netdev, u32 rcv_packet_idx,
    384			   u64 *tstamps, unsigned int pkts)
    385{
    386	struct es58x_priv *priv = es58x_priv(netdev);
    387	unsigned int rx_total_frame_len = 0;
    388	unsigned int num_echo_skb = priv->tx_head - priv->tx_tail;
    389	int i;
    390	u16 fifo_mask = priv->es58x_dev->param->fifo_mask;
    391
    392	if (!netif_running(netdev)) {
    393		if (net_ratelimit())
    394			netdev_info(netdev,
    395				    "%s: %s is down, dropping %d echo packets\n",
    396				    __func__, netdev->name, pkts);
    397		netdev->stats.tx_dropped += pkts;
    398		return 0;
    399	} else if (!es58x_is_can_state_active(netdev)) {
    400		if (net_ratelimit())
    401			netdev_dbg(netdev,
    402				   "Bus is off or device is restarting. Ignoring %u echo packets from index %u\n",
    403				   pkts, rcv_packet_idx);
    404		/* stats.tx_dropped will be (or was already)
    405		 * incremented by
    406		 * drivers/net/can/net/dev.c:can_flush_echo_skb().
    407		 */
    408		return 0;
    409	} else if (num_echo_skb == 0) {
    410		if (net_ratelimit())
    411			netdev_warn(netdev,
    412				    "Received %u echo packets from index: %u but echo skb queue is empty.\n",
    413				    pkts, rcv_packet_idx);
    414		netdev->stats.tx_dropped += pkts;
    415		return 0;
    416	}
    417
    418	if (priv->tx_tail != rcv_packet_idx) {
    419		if (es58x_can_get_echo_skb_recovery(netdev, rcv_packet_idx) < 0) {
    420			if (net_ratelimit())
    421				netdev_warn(netdev,
    422					    "Could not find echo skb for echo packet index: %u\n",
    423					    rcv_packet_idx);
    424			return 0;
    425		}
    426	}
    427	if (num_echo_skb < pkts) {
    428		int pkts_drop = pkts - num_echo_skb;
    429
    430		if (net_ratelimit())
    431			netdev_err(netdev,
    432				   "Received %u echo packets but have only %d echo skb. Dropping %d echo skb\n",
    433				   pkts, num_echo_skb, pkts_drop);
    434		netdev->stats.tx_dropped += pkts_drop;
    435		pkts -= pkts_drop;
    436	}
    437
    438	for (i = 0; i < pkts; i++) {
    439		unsigned int skb_idx = priv->tx_tail & fifo_mask;
    440		struct sk_buff *skb = priv->can.echo_skb[skb_idx];
    441		unsigned int frame_len = 0;
    442
    443		if (skb)
    444			es58x_set_skb_timestamp(netdev, skb, tstamps[i]);
    445
    446		netdev->stats.tx_bytes += can_get_echo_skb(netdev, skb_idx,
    447							   &frame_len);
    448		rx_total_frame_len += frame_len;
    449
    450		priv->tx_tail++;
    451	}
    452
    453	netdev_completed_queue(netdev, pkts, rx_total_frame_len);
    454	netdev->stats.tx_packets += pkts;
    455
    456	priv->err_passive_before_rtx_success = 0;
    457	if (!es58x_is_echo_skb_threshold_reached(priv))
    458		netif_wake_queue(netdev);
    459
    460	return 0;
    461}
    462
    463/**
    464 * es58x_can_reset_echo_fifo() - Reset the echo FIFO.
    465 * @netdev: CAN network device.
    466 *
    467 * The echo_skb array of struct can_priv will be flushed by
    468 * drivers/net/can/dev.c:can_flush_echo_skb(). This function resets
    469 * the parameters of the struct es58x_priv of our device and reset the
    470 * queue (c.f. BQL).
    471 */
    472static void es58x_can_reset_echo_fifo(struct net_device *netdev)
    473{
    474	struct es58x_priv *priv = es58x_priv(netdev);
    475
    476	priv->tx_tail = 0;
    477	priv->tx_head = 0;
    478	priv->tx_urb = NULL;
    479	priv->err_passive_before_rtx_success = 0;
    480	netdev_reset_queue(netdev);
    481}
    482
    483/**
    484 * es58x_flush_pending_tx_msg() - Reset the buffer for transmission messages.
    485 * @netdev: CAN network device.
    486 *
    487 * es58x_start_xmit() will queue up to tx_bulk_max messages in
    488 * &tx_urb buffer and do a bulk send of all messages in one single URB
    489 * (c.f. xmit_more flag). When the device recovers from a bus off
    490 * state or when the device stops, the tx_urb buffer might still have
    491 * pending messages in it and thus need to be flushed.
    492 */
    493static void es58x_flush_pending_tx_msg(struct net_device *netdev)
    494{
    495	struct es58x_priv *priv = es58x_priv(netdev);
    496	struct es58x_device *es58x_dev = priv->es58x_dev;
    497
    498	if (priv->tx_urb) {
    499		netdev_warn(netdev, "%s: dropping %d TX messages\n",
    500			    __func__, priv->tx_can_msg_cnt);
    501		netdev->stats.tx_dropped += priv->tx_can_msg_cnt;
    502		while (priv->tx_can_msg_cnt > 0) {
    503			unsigned int frame_len = 0;
    504			u16 fifo_mask = priv->es58x_dev->param->fifo_mask;
    505
    506			priv->tx_head--;
    507			priv->tx_can_msg_cnt--;
    508			can_free_echo_skb(netdev, priv->tx_head & fifo_mask,
    509					  &frame_len);
    510			netdev_completed_queue(netdev, 1, frame_len);
    511		}
    512		usb_anchor_urb(priv->tx_urb, &priv->es58x_dev->tx_urbs_idle);
    513		atomic_inc(&es58x_dev->tx_urbs_idle_cnt);
    514		usb_free_urb(priv->tx_urb);
    515	}
    516	priv->tx_urb = NULL;
    517}
    518
    519/**
    520 * es58x_tx_ack_msg() - Handle acknowledgment messages.
    521 * @netdev: CAN network device.
    522 * @tx_free_entries: Number of free entries in the device transmit FIFO.
    523 * @rx_cmd_ret_u32: error code as returned by the ES58X device.
    524 *
    525 * ES58X sends an acknowledgment message after a transmission request
    526 * is done. This is mandatory for the ES581.4 but is optional (and
    527 * deactivated in this driver) for the ES58X_FD family.
    528 *
    529 * Under normal circumstances, this function should never throw an
    530 * error message.
    531 *
    532 * Return: zero on success, errno when any error occurs.
    533 */
    534int es58x_tx_ack_msg(struct net_device *netdev, u16 tx_free_entries,
    535		     enum es58x_ret_u32 rx_cmd_ret_u32)
    536{
    537	struct es58x_priv *priv = es58x_priv(netdev);
    538
    539	if (tx_free_entries <= priv->es58x_dev->param->tx_bulk_max) {
    540		if (net_ratelimit())
    541			netdev_err(netdev,
    542				   "Only %d entries left in device queue, num_echo_skb: %d/%d\n",
    543				   tx_free_entries,
    544				   priv->tx_head - priv->tx_tail,
    545				   priv->can.echo_skb_max);
    546		netif_stop_queue(netdev);
    547	}
    548
    549	return es58x_rx_cmd_ret_u32(netdev, ES58X_RET_TYPE_TX_MSG,
    550				    rx_cmd_ret_u32);
    551}
    552
    553/**
    554 * es58x_rx_can_msg() - Handle a received a CAN message.
    555 * @netdev: CAN network device.
    556 * @timestamp: Hardware time stamp (only relevant in rx branches).
    557 * @data: CAN payload.
    558 * @can_id: CAN ID.
    559 * @es58x_flags: Please refer to enum es58x_flag.
    560 * @dlc: Data Length Code (raw value).
    561 *
    562 * Fill up a CAN skb and post it.
    563 *
    564 * This function handles the case where the DLC of a classical CAN
    565 * frame is greater than CAN_MAX_DLEN (c.f. the len8_dlc field of
    566 * struct can_frame).
    567 *
    568 * Return: zero on success.
    569 */
    570int es58x_rx_can_msg(struct net_device *netdev, u64 timestamp, const u8 *data,
    571		     canid_t can_id, enum es58x_flag es58x_flags, u8 dlc)
    572{
    573	struct canfd_frame *cfd;
    574	struct can_frame *ccf;
    575	struct sk_buff *skb;
    576	u8 len;
    577	bool is_can_fd = !!(es58x_flags & ES58X_FLAG_FD_DATA);
    578
    579	if (dlc > CAN_MAX_RAW_DLC) {
    580		netdev_err(netdev,
    581			   "%s: DLC is %d but maximum should be %d\n",
    582			   __func__, dlc, CAN_MAX_RAW_DLC);
    583		return -EMSGSIZE;
    584	}
    585
    586	if (is_can_fd) {
    587		len = can_fd_dlc2len(dlc);
    588		skb = alloc_canfd_skb(netdev, &cfd);
    589	} else {
    590		len = can_cc_dlc2len(dlc);
    591		skb = alloc_can_skb(netdev, &ccf);
    592		cfd = (struct canfd_frame *)ccf;
    593	}
    594	if (!skb) {
    595		netdev->stats.rx_dropped++;
    596		return 0;
    597	}
    598
    599	cfd->can_id = can_id;
    600	if (es58x_flags & ES58X_FLAG_EFF)
    601		cfd->can_id |= CAN_EFF_FLAG;
    602	if (is_can_fd) {
    603		cfd->len = len;
    604		if (es58x_flags & ES58X_FLAG_FD_BRS)
    605			cfd->flags |= CANFD_BRS;
    606		if (es58x_flags & ES58X_FLAG_FD_ESI)
    607			cfd->flags |= CANFD_ESI;
    608	} else {
    609		can_frame_set_cc_len(ccf, dlc, es58x_priv(netdev)->can.ctrlmode);
    610		if (es58x_flags & ES58X_FLAG_RTR) {
    611			ccf->can_id |= CAN_RTR_FLAG;
    612			len = 0;
    613		}
    614	}
    615	memcpy(cfd->data, data, len);
    616	netdev->stats.rx_packets++;
    617	netdev->stats.rx_bytes += len;
    618
    619	es58x_set_skb_timestamp(netdev, skb, timestamp);
    620	netif_rx(skb);
    621
    622	es58x_priv(netdev)->err_passive_before_rtx_success = 0;
    623
    624	return 0;
    625}
    626
    627/**
    628 * es58x_rx_err_msg() - Handle a received CAN event or error message.
    629 * @netdev: CAN network device.
    630 * @error: Error code.
    631 * @event: Event code.
    632 * @timestamp: Timestamp received from a ES58X device.
    633 *
    634 * Handle the errors and events received by the ES58X device, create
    635 * a CAN error skb and post it.
    636 *
    637 * In some rare cases the devices might get stuck alternating between
    638 * CAN_STATE_ERROR_PASSIVE and CAN_STATE_ERROR_WARNING. To prevent
    639 * this behavior, we force a bus off state if the device goes in
    640 * CAN_STATE_ERROR_WARNING for ES58X_MAX_CONSECUTIVE_WARN consecutive
    641 * times with no successful transmission or reception in between.
    642 *
    643 * Once the device is in bus off state, the only way to restart it is
    644 * through the drivers/net/can/dev.c:can_restart() function. The
    645 * device is technically capable to recover by itself under certain
    646 * circumstances, however, allowing self recovery would create
    647 * complex race conditions with drivers/net/can/dev.c:can_restart()
    648 * and thus was not implemented. To activate automatic restart, please
    649 * set the restart-ms parameter (e.g. ip link set can0 type can
    650 * restart-ms 100).
    651 *
    652 * If the bus is really instable, this function would try to send a
    653 * lot of log messages. Those are rate limited (i.e. you will see
    654 * messages such as "net_ratelimit: XXX callbacks suppressed" in
    655 * dmesg).
    656 *
    657 * Return: zero on success, errno when any error occurs.
    658 */
    659int es58x_rx_err_msg(struct net_device *netdev, enum es58x_err error,
    660		     enum es58x_event event, u64 timestamp)
    661{
    662	struct es58x_priv *priv = es58x_priv(netdev);
    663	struct can_priv *can = netdev_priv(netdev);
    664	struct can_device_stats *can_stats = &can->can_stats;
    665	struct can_frame *cf = NULL;
    666	struct sk_buff *skb;
    667	int ret = 0;
    668
    669	if (!netif_running(netdev)) {
    670		if (net_ratelimit())
    671			netdev_info(netdev, "%s: %s is down, dropping packet\n",
    672				    __func__, netdev->name);
    673		netdev->stats.rx_dropped++;
    674		return 0;
    675	}
    676
    677	if (error == ES58X_ERR_OK && event == ES58X_EVENT_OK) {
    678		netdev_err(netdev, "%s: Both error and event are zero\n",
    679			   __func__);
    680		return -EINVAL;
    681	}
    682
    683	skb = alloc_can_err_skb(netdev, &cf);
    684
    685	switch (error) {
    686	case ES58X_ERR_OK:	/* 0: No error */
    687		break;
    688
    689	case ES58X_ERR_PROT_STUFF:
    690		if (net_ratelimit())
    691			netdev_dbg(netdev, "Error BITSTUFF\n");
    692		if (cf)
    693			cf->data[2] |= CAN_ERR_PROT_STUFF;
    694		break;
    695
    696	case ES58X_ERR_PROT_FORM:
    697		if (net_ratelimit())
    698			netdev_dbg(netdev, "Error FORMAT\n");
    699		if (cf)
    700			cf->data[2] |= CAN_ERR_PROT_FORM;
    701		break;
    702
    703	case ES58X_ERR_ACK:
    704		if (net_ratelimit())
    705			netdev_dbg(netdev, "Error ACK\n");
    706		if (cf)
    707			cf->can_id |= CAN_ERR_ACK;
    708		break;
    709
    710	case ES58X_ERR_PROT_BIT:
    711		if (net_ratelimit())
    712			netdev_dbg(netdev, "Error BIT\n");
    713		if (cf)
    714			cf->data[2] |= CAN_ERR_PROT_BIT;
    715		break;
    716
    717	case ES58X_ERR_PROT_CRC:
    718		if (net_ratelimit())
    719			netdev_dbg(netdev, "Error CRC\n");
    720		if (cf)
    721			cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ;
    722		break;
    723
    724	case ES58X_ERR_PROT_BIT1:
    725		if (net_ratelimit())
    726			netdev_dbg(netdev,
    727				   "Error: expected a recessive bit but monitored a dominant one\n");
    728		if (cf)
    729			cf->data[2] |= CAN_ERR_PROT_BIT1;
    730		break;
    731
    732	case ES58X_ERR_PROT_BIT0:
    733		if (net_ratelimit())
    734			netdev_dbg(netdev,
    735				   "Error expected a dominant bit but monitored a recessive one\n");
    736		if (cf)
    737			cf->data[2] |= CAN_ERR_PROT_BIT0;
    738		break;
    739
    740	case ES58X_ERR_PROT_OVERLOAD:
    741		if (net_ratelimit())
    742			netdev_dbg(netdev, "Error OVERLOAD\n");
    743		if (cf)
    744			cf->data[2] |= CAN_ERR_PROT_OVERLOAD;
    745		break;
    746
    747	case ES58X_ERR_PROT_UNSPEC:
    748		if (net_ratelimit())
    749			netdev_dbg(netdev, "Unspecified error\n");
    750		if (cf)
    751			cf->can_id |= CAN_ERR_PROT;
    752		break;
    753
    754	default:
    755		if (net_ratelimit())
    756			netdev_err(netdev,
    757				   "%s: Unspecified error code 0x%04X\n",
    758				   __func__, (int)error);
    759		if (cf)
    760			cf->can_id |= CAN_ERR_PROT;
    761		break;
    762	}
    763
    764	switch (event) {
    765	case ES58X_EVENT_OK:	/* 0: No event */
    766		break;
    767
    768	case ES58X_EVENT_CRTL_ACTIVE:
    769		if (can->state == CAN_STATE_BUS_OFF) {
    770			netdev_err(netdev,
    771				   "%s: state transition: BUS OFF -> ACTIVE\n",
    772				   __func__);
    773		}
    774		if (net_ratelimit())
    775			netdev_dbg(netdev, "Event CAN BUS ACTIVE\n");
    776		if (cf)
    777			cf->data[1] |= CAN_ERR_CRTL_ACTIVE;
    778		can->state = CAN_STATE_ERROR_ACTIVE;
    779		break;
    780
    781	case ES58X_EVENT_CRTL_PASSIVE:
    782		if (net_ratelimit())
    783			netdev_dbg(netdev, "Event CAN BUS PASSIVE\n");
    784		/* Either TX or RX error count reached passive state
    785		 * but we do not know which. Setting both flags by
    786		 * default.
    787		 */
    788		if (cf) {
    789			cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
    790			cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
    791		}
    792		if (can->state < CAN_STATE_BUS_OFF)
    793			can->state = CAN_STATE_ERROR_PASSIVE;
    794		can_stats->error_passive++;
    795		if (priv->err_passive_before_rtx_success < U8_MAX)
    796			priv->err_passive_before_rtx_success++;
    797		break;
    798
    799	case ES58X_EVENT_CRTL_WARNING:
    800		if (net_ratelimit())
    801			netdev_dbg(netdev, "Event CAN BUS WARNING\n");
    802		/* Either TX or RX error count reached warning state
    803		 * but we do not know which. Setting both flags by
    804		 * default.
    805		 */
    806		if (cf) {
    807			cf->data[1] |= CAN_ERR_CRTL_RX_WARNING;
    808			cf->data[1] |= CAN_ERR_CRTL_TX_WARNING;
    809		}
    810		if (can->state < CAN_STATE_BUS_OFF)
    811			can->state = CAN_STATE_ERROR_WARNING;
    812		can_stats->error_warning++;
    813		break;
    814
    815	case ES58X_EVENT_BUSOFF:
    816		if (net_ratelimit())
    817			netdev_dbg(netdev, "Event CAN BUS OFF\n");
    818		if (cf)
    819			cf->can_id |= CAN_ERR_BUSOFF;
    820		can_stats->bus_off++;
    821		netif_stop_queue(netdev);
    822		if (can->state != CAN_STATE_BUS_OFF) {
    823			can->state = CAN_STATE_BUS_OFF;
    824			can_bus_off(netdev);
    825			ret = can->do_set_mode(netdev, CAN_MODE_STOP);
    826		}
    827		break;
    828
    829	case ES58X_EVENT_SINGLE_WIRE:
    830		if (net_ratelimit())
    831			netdev_warn(netdev,
    832				    "Lost connection on either CAN high or CAN low\n");
    833		/* Lost connection on either CAN high or CAN
    834		 * low. Setting both flags by default.
    835		 */
    836		if (cf) {
    837			cf->data[4] |= CAN_ERR_TRX_CANH_NO_WIRE;
    838			cf->data[4] |= CAN_ERR_TRX_CANL_NO_WIRE;
    839		}
    840		break;
    841
    842	default:
    843		if (net_ratelimit())
    844			netdev_err(netdev,
    845				   "%s: Unspecified event code 0x%04X\n",
    846				   __func__, (int)event);
    847		if (cf)
    848			cf->can_id |= CAN_ERR_CRTL;
    849		break;
    850	}
    851
    852	if (cf) {
    853		if (cf->data[1])
    854			cf->can_id |= CAN_ERR_CRTL;
    855		if (cf->data[2] || cf->data[3]) {
    856			cf->can_id |= CAN_ERR_PROT;
    857			can_stats->bus_error++;
    858		}
    859		if (cf->data[4])
    860			cf->can_id |= CAN_ERR_TRX;
    861
    862		es58x_set_skb_timestamp(netdev, skb, timestamp);
    863		netif_rx(skb);
    864	}
    865
    866	if ((event & ES58X_EVENT_CRTL_PASSIVE) &&
    867	    priv->err_passive_before_rtx_success == ES58X_CONSECUTIVE_ERR_PASSIVE_MAX) {
    868		netdev_info(netdev,
    869			    "Got %d consecutive warning events with no successful RX or TX. Forcing bus-off\n",
    870			    priv->err_passive_before_rtx_success);
    871		return es58x_rx_err_msg(netdev, ES58X_ERR_OK,
    872					ES58X_EVENT_BUSOFF, timestamp);
    873	}
    874
    875	return ret;
    876}
    877
    878/**
    879 * es58x_cmd_ret_desc() - Convert a command type to a string.
    880 * @cmd_ret_type: Type of the command which triggered the return code.
    881 *
    882 * The final line (return "<unknown>") should not be reached. If this
    883 * is the case, there is an implementation bug.
    884 *
    885 * Return: a readable description of the @cmd_ret_type.
    886 */
    887static const char *es58x_cmd_ret_desc(enum es58x_ret_type cmd_ret_type)
    888{
    889	switch (cmd_ret_type) {
    890	case ES58X_RET_TYPE_SET_BITTIMING:
    891		return "Set bittiming";
    892	case ES58X_RET_TYPE_ENABLE_CHANNEL:
    893		return "Enable channel";
    894	case ES58X_RET_TYPE_DISABLE_CHANNEL:
    895		return "Disable channel";
    896	case ES58X_RET_TYPE_TX_MSG:
    897		return "Transmit message";
    898	case ES58X_RET_TYPE_RESET_RX:
    899		return "Reset RX";
    900	case ES58X_RET_TYPE_RESET_TX:
    901		return "Reset TX";
    902	case ES58X_RET_TYPE_DEVICE_ERR:
    903		return "Device error";
    904	}
    905
    906	return "<unknown>";
    907};
    908
    909/**
    910 * es58x_rx_cmd_ret_u8() - Handle the command's return code received
    911 *	from the ES58X device.
    912 * @dev: Device, only used for the dev_XXX() print functions.
    913 * @cmd_ret_type: Type of the command which triggered the return code.
    914 * @rx_cmd_ret_u8: Command error code as returned by the ES58X device.
    915 *
    916 * Handles the 8 bits command return code. Those are specific to the
    917 * ES581.4 device. The return value will eventually be used by
    918 * es58x_handle_urb_cmd() function which will take proper actions in
    919 * case of critical issues such and memory errors or bad CRC values.
    920 *
    921 * In contrast with es58x_rx_cmd_ret_u32(), the network device is
    922 * unknown.
    923 *
    924 * Return: zero on success, return errno when any error occurs.
    925 */
    926int es58x_rx_cmd_ret_u8(struct device *dev,
    927			enum es58x_ret_type cmd_ret_type,
    928			enum es58x_ret_u8 rx_cmd_ret_u8)
    929{
    930	const char *ret_desc = es58x_cmd_ret_desc(cmd_ret_type);
    931
    932	switch (rx_cmd_ret_u8) {
    933	case ES58X_RET_U8_OK:
    934		dev_dbg_ratelimited(dev, "%s: OK\n", ret_desc);
    935		return 0;
    936
    937	case ES58X_RET_U8_ERR_UNSPECIFIED_FAILURE:
    938		dev_err(dev, "%s: unspecified failure\n", ret_desc);
    939		return -EBADMSG;
    940
    941	case ES58X_RET_U8_ERR_NO_MEM:
    942		dev_err(dev, "%s: device ran out of memory\n", ret_desc);
    943		return -ENOMEM;
    944
    945	case ES58X_RET_U8_ERR_BAD_CRC:
    946		dev_err(dev, "%s: CRC of previous command is incorrect\n",
    947			ret_desc);
    948		return -EIO;
    949
    950	default:
    951		dev_err(dev, "%s: returned unknown value: 0x%02X\n",
    952			ret_desc, rx_cmd_ret_u8);
    953		return -EBADMSG;
    954	}
    955}
    956
    957/**
    958 * es58x_rx_cmd_ret_u32() - Handle the command return code received
    959 *	from the ES58X device.
    960 * @netdev: CAN network device.
    961 * @cmd_ret_type: Type of the command which triggered the return code.
    962 * @rx_cmd_ret_u32: error code as returned by the ES58X device.
    963 *
    964 * Handles the 32 bits command return code. The return value will
    965 * eventually be used by es58x_handle_urb_cmd() function which will
    966 * take proper actions in case of critical issues such and memory
    967 * errors or bad CRC values.
    968 *
    969 * Return: zero on success, errno when any error occurs.
    970 */
    971int es58x_rx_cmd_ret_u32(struct net_device *netdev,
    972			 enum es58x_ret_type cmd_ret_type,
    973			 enum es58x_ret_u32 rx_cmd_ret_u32)
    974{
    975	struct es58x_priv *priv = es58x_priv(netdev);
    976	const struct es58x_operators *ops = priv->es58x_dev->ops;
    977	const char *ret_desc = es58x_cmd_ret_desc(cmd_ret_type);
    978
    979	switch (rx_cmd_ret_u32) {
    980	case ES58X_RET_U32_OK:
    981		switch (cmd_ret_type) {
    982		case ES58X_RET_TYPE_ENABLE_CHANNEL:
    983			es58x_can_reset_echo_fifo(netdev);
    984			priv->can.state = CAN_STATE_ERROR_ACTIVE;
    985			netif_wake_queue(netdev);
    986			netdev_info(netdev,
    987				    "%s: %s (Serial Number %s): CAN%d channel becomes ready\n",
    988				    ret_desc, priv->es58x_dev->udev->product,
    989				    priv->es58x_dev->udev->serial,
    990				    priv->channel_idx + 1);
    991			break;
    992
    993		case ES58X_RET_TYPE_TX_MSG:
    994			if (IS_ENABLED(CONFIG_VERBOSE_DEBUG) && net_ratelimit())
    995				netdev_vdbg(netdev, "%s: OK\n", ret_desc);
    996			break;
    997
    998		default:
    999			netdev_dbg(netdev, "%s: OK\n", ret_desc);
   1000			break;
   1001		}
   1002		return 0;
   1003
   1004	case ES58X_RET_U32_ERR_UNSPECIFIED_FAILURE:
   1005		if (cmd_ret_type == ES58X_RET_TYPE_ENABLE_CHANNEL) {
   1006			int ret;
   1007
   1008			netdev_warn(netdev,
   1009				    "%s: channel is already opened, closing and re-opening it to reflect new configuration\n",
   1010				    ret_desc);
   1011			ret = ops->disable_channel(es58x_priv(netdev));
   1012			if (ret)
   1013				return ret;
   1014			return ops->enable_channel(es58x_priv(netdev));
   1015		}
   1016		if (cmd_ret_type == ES58X_RET_TYPE_DISABLE_CHANNEL) {
   1017			netdev_info(netdev,
   1018				    "%s: channel is already closed\n", ret_desc);
   1019			return 0;
   1020		}
   1021		netdev_err(netdev,
   1022			   "%s: unspecified failure\n", ret_desc);
   1023		return -EBADMSG;
   1024
   1025	case ES58X_RET_U32_ERR_NO_MEM:
   1026		netdev_err(netdev, "%s: device ran out of memory\n", ret_desc);
   1027		return -ENOMEM;
   1028
   1029	case ES58X_RET_U32_WARN_PARAM_ADJUSTED:
   1030		netdev_warn(netdev,
   1031			    "%s: some incompatible parameters have been adjusted\n",
   1032			    ret_desc);
   1033		return 0;
   1034
   1035	case ES58X_RET_U32_WARN_TX_MAYBE_REORDER:
   1036		netdev_warn(netdev,
   1037			    "%s: TX messages might have been reordered\n",
   1038			    ret_desc);
   1039		return 0;
   1040
   1041	case ES58X_RET_U32_ERR_TIMEDOUT:
   1042		netdev_err(netdev, "%s: command timed out\n", ret_desc);
   1043		return -ETIMEDOUT;
   1044
   1045	case ES58X_RET_U32_ERR_FIFO_FULL:
   1046		netdev_warn(netdev, "%s: fifo is full\n", ret_desc);
   1047		return 0;
   1048
   1049	case ES58X_RET_U32_ERR_BAD_CONFIG:
   1050		netdev_err(netdev, "%s: bad configuration\n", ret_desc);
   1051		return -EINVAL;
   1052
   1053	case ES58X_RET_U32_ERR_NO_RESOURCE:
   1054		netdev_err(netdev, "%s: no resource available\n", ret_desc);
   1055		return -EBUSY;
   1056
   1057	default:
   1058		netdev_err(netdev, "%s returned unknown value: 0x%08X\n",
   1059			   ret_desc, rx_cmd_ret_u32);
   1060		return -EBADMSG;
   1061	}
   1062}
   1063
   1064/**
   1065 * es58x_increment_rx_errors() - Increment the network devices' error
   1066 *	count.
   1067 * @es58x_dev: ES58X device.
   1068 *
   1069 * If an error occurs on the early stages on receiving an URB command,
   1070 * we might not be able to figure out on which network device the
   1071 * error occurred. In such case, we arbitrarily increment the error
   1072 * count of all the network devices attached to our ES58X device.
   1073 */
   1074static void es58x_increment_rx_errors(struct es58x_device *es58x_dev)
   1075{
   1076	int i;
   1077
   1078	for (i = 0; i < es58x_dev->num_can_ch; i++)
   1079		if (es58x_dev->netdev[i])
   1080			es58x_dev->netdev[i]->stats.rx_errors++;
   1081}
   1082
   1083/**
   1084 * es58x_handle_urb_cmd() - Handle the URB command
   1085 * @es58x_dev: ES58X device.
   1086 * @urb_cmd: The URB command received from the ES58X device, might not
   1087 *	be aligned.
   1088 *
   1089 * Sends the URB command to the device specific function. Manages the
   1090 * errors thrown back by those functions.
   1091 */
   1092static void es58x_handle_urb_cmd(struct es58x_device *es58x_dev,
   1093				 const union es58x_urb_cmd *urb_cmd)
   1094{
   1095	const struct es58x_operators *ops = es58x_dev->ops;
   1096	size_t cmd_len;
   1097	int i, ret;
   1098
   1099	ret = ops->handle_urb_cmd(es58x_dev, urb_cmd);
   1100	switch (ret) {
   1101	case 0:		/* OK */
   1102		return;
   1103
   1104	case -ENODEV:
   1105		dev_err_ratelimited(es58x_dev->dev, "Device is not ready\n");
   1106		break;
   1107
   1108	case -EINVAL:
   1109	case -EMSGSIZE:
   1110	case -EBADRQC:
   1111	case -EBADMSG:
   1112	case -ECHRNG:
   1113	case -ETIMEDOUT:
   1114		cmd_len = es58x_get_urb_cmd_len(es58x_dev,
   1115						ops->get_msg_len(urb_cmd));
   1116		dev_err(es58x_dev->dev,
   1117			"ops->handle_urb_cmd() returned error %pe",
   1118			ERR_PTR(ret));
   1119		es58x_print_hex_dump(urb_cmd, cmd_len);
   1120		break;
   1121
   1122	case -EFAULT:
   1123	case -ENOMEM:
   1124	case -EIO:
   1125	default:
   1126		dev_crit(es58x_dev->dev,
   1127			 "ops->handle_urb_cmd() returned error %pe, detaching all network devices\n",
   1128			 ERR_PTR(ret));
   1129		for (i = 0; i < es58x_dev->num_can_ch; i++)
   1130			if (es58x_dev->netdev[i])
   1131				netif_device_detach(es58x_dev->netdev[i]);
   1132		if (es58x_dev->ops->reset_device)
   1133			es58x_dev->ops->reset_device(es58x_dev);
   1134		break;
   1135	}
   1136
   1137	/* Because the urb command could not fully be parsed,
   1138	 * channel_id is not confirmed. Incrementing rx_errors count
   1139	 * of all channels.
   1140	 */
   1141	es58x_increment_rx_errors(es58x_dev);
   1142}
   1143
   1144/**
   1145 * es58x_check_rx_urb() - Check the length and format of the URB command.
   1146 * @es58x_dev: ES58X device.
   1147 * @urb_cmd: The URB command received from the ES58X device, might not
   1148 *	be aligned.
   1149 * @urb_actual_len: The actual length of the URB command.
   1150 *
   1151 * Check if the first message of the received urb is valid, that is to
   1152 * say that both the header and the length are coherent.
   1153 *
   1154 * Return:
   1155 * the length of the first message of the URB on success.
   1156 *
   1157 * -ENODATA if the URB command is incomplete (in which case, the URB
   1158 * command should be buffered and combined with the next URB to try to
   1159 * reconstitute the URB command).
   1160 *
   1161 * -EOVERFLOW if the length is bigger than the maximum expected one.
   1162 *
   1163 * -EBADRQC if the start of frame does not match the expected value.
   1164 */
   1165static signed int es58x_check_rx_urb(struct es58x_device *es58x_dev,
   1166				     const union es58x_urb_cmd *urb_cmd,
   1167				     u32 urb_actual_len)
   1168{
   1169	const struct device *dev = es58x_dev->dev;
   1170	const struct es58x_parameters *param = es58x_dev->param;
   1171	u16 sof, msg_len;
   1172	signed int urb_cmd_len, ret;
   1173
   1174	if (urb_actual_len < param->urb_cmd_header_len) {
   1175		dev_vdbg(dev,
   1176			 "%s: Received %d bytes [%*ph]: header incomplete\n",
   1177			 __func__, urb_actual_len, urb_actual_len,
   1178			 urb_cmd->raw_cmd);
   1179		return -ENODATA;
   1180	}
   1181
   1182	sof = get_unaligned_le16(&urb_cmd->sof);
   1183	if (sof != param->rx_start_of_frame) {
   1184		dev_err_ratelimited(es58x_dev->dev,
   1185				    "%s: Expected sequence 0x%04X for start of frame but got 0x%04X.\n",
   1186				    __func__, param->rx_start_of_frame, sof);
   1187		return -EBADRQC;
   1188	}
   1189
   1190	msg_len = es58x_dev->ops->get_msg_len(urb_cmd);
   1191	urb_cmd_len = es58x_get_urb_cmd_len(es58x_dev, msg_len);
   1192	if (urb_cmd_len > param->rx_urb_cmd_max_len) {
   1193		dev_err_ratelimited(es58x_dev->dev,
   1194				    "%s: Biggest expected size for rx urb_cmd is %u but receive a command of size %d\n",
   1195				    __func__,
   1196				    param->rx_urb_cmd_max_len, urb_cmd_len);
   1197		return -EOVERFLOW;
   1198	} else if (urb_actual_len < urb_cmd_len) {
   1199		dev_vdbg(dev, "%s: Received %02d/%02d bytes\n",
   1200			 __func__, urb_actual_len, urb_cmd_len);
   1201		return -ENODATA;
   1202	}
   1203
   1204	ret = es58x_check_crc(es58x_dev, urb_cmd, urb_cmd_len);
   1205	if (ret)
   1206		return ret;
   1207
   1208	return urb_cmd_len;
   1209}
   1210
   1211/**
   1212 * es58x_copy_to_cmd_buf() - Copy an array to the URB command buffer.
   1213 * @es58x_dev: ES58X device.
   1214 * @raw_cmd: the buffer we want to copy.
   1215 * @raw_cmd_len: length of @raw_cmd.
   1216 *
   1217 * Concatenates @raw_cmd_len bytes of @raw_cmd to the end of the URB
   1218 * command buffer.
   1219 *
   1220 * Return: zero on success, -EMSGSIZE if not enough space is available
   1221 * to do the copy.
   1222 */
   1223static int es58x_copy_to_cmd_buf(struct es58x_device *es58x_dev,
   1224				 u8 *raw_cmd, int raw_cmd_len)
   1225{
   1226	if (es58x_dev->rx_cmd_buf_len + raw_cmd_len >
   1227	    es58x_dev->param->rx_urb_cmd_max_len)
   1228		return -EMSGSIZE;
   1229
   1230	memcpy(&es58x_dev->rx_cmd_buf.raw_cmd[es58x_dev->rx_cmd_buf_len],
   1231	       raw_cmd, raw_cmd_len);
   1232	es58x_dev->rx_cmd_buf_len += raw_cmd_len;
   1233
   1234	return 0;
   1235}
   1236
   1237/**
   1238 * es58x_split_urb_try_recovery() - Try to recover bad URB sequences.
   1239 * @es58x_dev: ES58X device.
   1240 * @raw_cmd: pointer to the buffer we want to copy.
   1241 * @raw_cmd_len: length of @raw_cmd.
   1242 *
   1243 * Under some rare conditions, we might get incorrect URBs from the
   1244 * device. From our observations, one of the valid URB gets replaced
   1245 * by one from the past. The full root cause is not identified.
   1246 *
   1247 * This function looks for the next start of frame in the urb buffer
   1248 * in order to try to recover.
   1249 *
   1250 * Such behavior was not observed on the devices of the ES58X FD
   1251 * family and only seems to impact the ES581.4.
   1252 *
   1253 * Return: the number of bytes dropped on success, -EBADMSG if recovery failed.
   1254 */
   1255static int es58x_split_urb_try_recovery(struct es58x_device *es58x_dev,
   1256					u8 *raw_cmd, size_t raw_cmd_len)
   1257{
   1258	union es58x_urb_cmd *urb_cmd;
   1259	signed int urb_cmd_len;
   1260	u16 sof;
   1261	int dropped_bytes = 0;
   1262
   1263	es58x_increment_rx_errors(es58x_dev);
   1264
   1265	while (raw_cmd_len > sizeof(sof)) {
   1266		urb_cmd = (union es58x_urb_cmd *)raw_cmd;
   1267		sof = get_unaligned_le16(&urb_cmd->sof);
   1268
   1269		if (sof == es58x_dev->param->rx_start_of_frame) {
   1270			urb_cmd_len = es58x_check_rx_urb(es58x_dev,
   1271							 urb_cmd, raw_cmd_len);
   1272			if ((urb_cmd_len == -ENODATA) || urb_cmd_len > 0) {
   1273				dev_info_ratelimited(es58x_dev->dev,
   1274						     "Recovery successful! Dropped %d bytes (urb_cmd_len: %d)\n",
   1275						     dropped_bytes,
   1276						     urb_cmd_len);
   1277				return dropped_bytes;
   1278			}
   1279		}
   1280		raw_cmd++;
   1281		raw_cmd_len--;
   1282		dropped_bytes++;
   1283	}
   1284
   1285	dev_warn_ratelimited(es58x_dev->dev, "%s: Recovery failed\n", __func__);
   1286	return -EBADMSG;
   1287}
   1288
   1289/**
   1290 * es58x_handle_incomplete_cmd() - Reconstitute an URB command from
   1291 *	different URB pieces.
   1292 * @es58x_dev: ES58X device.
   1293 * @urb: last urb buffer received.
   1294 *
   1295 * The device might split the URB commands in an arbitrary amount of
   1296 * pieces. This function concatenates those in an URB buffer until a
   1297 * full URB command is reconstituted and consume it.
   1298 *
   1299 * Return:
   1300 * number of bytes consumed from @urb if successful.
   1301 *
   1302 * -ENODATA if the URB command is still incomplete.
   1303 *
   1304 * -EBADMSG if the URB command is incorrect.
   1305 */
   1306static signed int es58x_handle_incomplete_cmd(struct es58x_device *es58x_dev,
   1307					      struct urb *urb)
   1308{
   1309	size_t cpy_len;
   1310	signed int urb_cmd_len, tmp_cmd_buf_len, ret;
   1311
   1312	tmp_cmd_buf_len = es58x_dev->rx_cmd_buf_len;
   1313	cpy_len = min_t(int, es58x_dev->param->rx_urb_cmd_max_len -
   1314			es58x_dev->rx_cmd_buf_len, urb->actual_length);
   1315	ret = es58x_copy_to_cmd_buf(es58x_dev, urb->transfer_buffer, cpy_len);
   1316	if (ret < 0)
   1317		return ret;
   1318
   1319	urb_cmd_len = es58x_check_rx_urb(es58x_dev, &es58x_dev->rx_cmd_buf,
   1320					 es58x_dev->rx_cmd_buf_len);
   1321	if (urb_cmd_len == -ENODATA) {
   1322		return -ENODATA;
   1323	} else if (urb_cmd_len < 0) {
   1324		dev_err_ratelimited(es58x_dev->dev,
   1325				    "Could not reconstitute incomplete command from previous URB, dropping %d bytes\n",
   1326				    tmp_cmd_buf_len + urb->actual_length);
   1327		dev_err_ratelimited(es58x_dev->dev,
   1328				    "Error code: %pe, es58x_dev->rx_cmd_buf_len: %d, urb->actual_length: %u\n",
   1329				    ERR_PTR(urb_cmd_len),
   1330				    tmp_cmd_buf_len, urb->actual_length);
   1331		es58x_print_hex_dump(&es58x_dev->rx_cmd_buf, tmp_cmd_buf_len);
   1332		es58x_print_hex_dump(urb->transfer_buffer, urb->actual_length);
   1333		return urb->actual_length;
   1334	}
   1335
   1336	es58x_handle_urb_cmd(es58x_dev, &es58x_dev->rx_cmd_buf);
   1337	return urb_cmd_len - tmp_cmd_buf_len;	/* consumed length */
   1338}
   1339
   1340/**
   1341 * es58x_split_urb() - Cut the received URB in individual URB commands.
   1342 * @es58x_dev: ES58X device.
   1343 * @urb: last urb buffer received.
   1344 *
   1345 * The device might send urb in bulk format (i.e. several URB commands
   1346 * concatenated together). This function will split all the commands
   1347 * contained in the urb.
   1348 *
   1349 * Return:
   1350 * number of bytes consumed from @urb if successful.
   1351 *
   1352 * -ENODATA if the URB command is incomplete.
   1353 *
   1354 * -EBADMSG if the URB command is incorrect.
   1355 */
   1356static signed int es58x_split_urb(struct es58x_device *es58x_dev,
   1357				  struct urb *urb)
   1358{
   1359	union es58x_urb_cmd *urb_cmd;
   1360	u8 *raw_cmd = urb->transfer_buffer;
   1361	s32 raw_cmd_len = urb->actual_length;
   1362	int ret;
   1363
   1364	if (es58x_dev->rx_cmd_buf_len != 0) {
   1365		ret = es58x_handle_incomplete_cmd(es58x_dev, urb);
   1366		if (ret != -ENODATA)
   1367			es58x_dev->rx_cmd_buf_len = 0;
   1368		if (ret < 0)
   1369			return ret;
   1370
   1371		raw_cmd += ret;
   1372		raw_cmd_len -= ret;
   1373	}
   1374
   1375	while (raw_cmd_len > 0) {
   1376		if (raw_cmd[0] == ES58X_HEARTBEAT) {
   1377			raw_cmd++;
   1378			raw_cmd_len--;
   1379			continue;
   1380		}
   1381		urb_cmd = (union es58x_urb_cmd *)raw_cmd;
   1382		ret = es58x_check_rx_urb(es58x_dev, urb_cmd, raw_cmd_len);
   1383		if (ret > 0) {
   1384			es58x_handle_urb_cmd(es58x_dev, urb_cmd);
   1385		} else if (ret == -ENODATA) {
   1386			es58x_copy_to_cmd_buf(es58x_dev, raw_cmd, raw_cmd_len);
   1387			return -ENODATA;
   1388		} else if (ret < 0) {
   1389			ret = es58x_split_urb_try_recovery(es58x_dev, raw_cmd,
   1390							   raw_cmd_len);
   1391			if (ret < 0)
   1392				return ret;
   1393		}
   1394		raw_cmd += ret;
   1395		raw_cmd_len -= ret;
   1396	}
   1397
   1398	return 0;
   1399}
   1400
   1401/**
   1402 * es58x_read_bulk_callback() - Callback for reading data from device.
   1403 * @urb: last urb buffer received.
   1404 *
   1405 * This function gets eventually called each time an URB is received
   1406 * from the ES58X device.
   1407 *
   1408 * Checks urb status, calls read function and resubmits urb read
   1409 * operation.
   1410 */
   1411static void es58x_read_bulk_callback(struct urb *urb)
   1412{
   1413	struct es58x_device *es58x_dev = urb->context;
   1414	const struct device *dev = es58x_dev->dev;
   1415	int i, ret;
   1416
   1417	switch (urb->status) {
   1418	case 0:		/* success */
   1419		break;
   1420
   1421	case -EOVERFLOW:
   1422		dev_err_ratelimited(dev, "%s: error %pe\n",
   1423				    __func__, ERR_PTR(urb->status));
   1424		es58x_print_hex_dump_debug(urb->transfer_buffer,
   1425					   urb->transfer_buffer_length);
   1426		goto resubmit_urb;
   1427
   1428	case -EPROTO:
   1429		dev_warn_ratelimited(dev, "%s: error %pe. Device unplugged?\n",
   1430				     __func__, ERR_PTR(urb->status));
   1431		goto free_urb;
   1432
   1433	case -ENOENT:
   1434	case -EPIPE:
   1435		dev_err_ratelimited(dev, "%s: error %pe\n",
   1436				    __func__, ERR_PTR(urb->status));
   1437		goto free_urb;
   1438
   1439	case -ESHUTDOWN:
   1440		dev_dbg_ratelimited(dev, "%s: error %pe\n",
   1441				    __func__, ERR_PTR(urb->status));
   1442		goto free_urb;
   1443
   1444	default:
   1445		dev_err_ratelimited(dev, "%s: error %pe\n",
   1446				    __func__, ERR_PTR(urb->status));
   1447		goto resubmit_urb;
   1448	}
   1449
   1450	ret = es58x_split_urb(es58x_dev, urb);
   1451	if ((ret != -ENODATA) && ret < 0) {
   1452		dev_err(es58x_dev->dev, "es58x_split_urb() returned error %pe",
   1453			ERR_PTR(ret));
   1454		es58x_print_hex_dump_debug(urb->transfer_buffer,
   1455					   urb->actual_length);
   1456
   1457		/* Because the urb command could not be parsed,
   1458		 * channel_id is not confirmed. Incrementing rx_errors
   1459		 * count of all channels.
   1460		 */
   1461		es58x_increment_rx_errors(es58x_dev);
   1462	}
   1463
   1464 resubmit_urb:
   1465	usb_fill_bulk_urb(urb, es58x_dev->udev, es58x_dev->rx_pipe,
   1466			  urb->transfer_buffer, urb->transfer_buffer_length,
   1467			  es58x_read_bulk_callback, es58x_dev);
   1468
   1469	ret = usb_submit_urb(urb, GFP_ATOMIC);
   1470	if (ret == -ENODEV) {
   1471		for (i = 0; i < es58x_dev->num_can_ch; i++)
   1472			if (es58x_dev->netdev[i])
   1473				netif_device_detach(es58x_dev->netdev[i]);
   1474	} else if (ret)
   1475		dev_err_ratelimited(dev,
   1476				    "Failed resubmitting read bulk urb: %pe\n",
   1477				    ERR_PTR(ret));
   1478	return;
   1479
   1480 free_urb:
   1481	usb_free_coherent(urb->dev, urb->transfer_buffer_length,
   1482			  urb->transfer_buffer, urb->transfer_dma);
   1483}
   1484
   1485/**
   1486 * es58x_write_bulk_callback() - Callback after writing data to the device.
   1487 * @urb: urb buffer which was previously submitted.
   1488 *
   1489 * This function gets eventually called each time an URB was sent to
   1490 * the ES58X device.
   1491 *
   1492 * Puts the @urb back to the urbs idle anchor and tries to restart the
   1493 * network queue.
   1494 */
   1495static void es58x_write_bulk_callback(struct urb *urb)
   1496{
   1497	struct net_device *netdev = urb->context;
   1498	struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev;
   1499
   1500	switch (urb->status) {
   1501	case 0:		/* success */
   1502		break;
   1503
   1504	case -EOVERFLOW:
   1505		if (net_ratelimit())
   1506			netdev_err(netdev, "%s: error %pe\n",
   1507				   __func__, ERR_PTR(urb->status));
   1508		es58x_print_hex_dump(urb->transfer_buffer,
   1509				     urb->transfer_buffer_length);
   1510		break;
   1511
   1512	case -ENOENT:
   1513		if (net_ratelimit())
   1514			netdev_dbg(netdev, "%s: error %pe\n",
   1515				   __func__, ERR_PTR(urb->status));
   1516		usb_free_coherent(urb->dev,
   1517				  es58x_dev->param->tx_urb_cmd_max_len,
   1518				  urb->transfer_buffer, urb->transfer_dma);
   1519		return;
   1520
   1521	default:
   1522		if (net_ratelimit())
   1523			netdev_info(netdev, "%s: error %pe\n",
   1524				    __func__, ERR_PTR(urb->status));
   1525		break;
   1526	}
   1527
   1528	usb_anchor_urb(urb, &es58x_dev->tx_urbs_idle);
   1529	atomic_inc(&es58x_dev->tx_urbs_idle_cnt);
   1530}
   1531
   1532/**
   1533 * es58x_alloc_urb() - Allocate memory for an URB and its transfer
   1534 *	buffer.
   1535 * @es58x_dev: ES58X device.
   1536 * @urb: URB to be allocated.
   1537 * @buf: used to return DMA address of buffer.
   1538 * @buf_len: requested buffer size.
   1539 * @mem_flags: affect whether allocation may block.
   1540 *
   1541 * Allocates an URB and its @transfer_buffer and set its @transfer_dma
   1542 * address.
   1543 *
   1544 * This function is used at start-up to allocate all RX URBs at once
   1545 * and during run time for TX URBs.
   1546 *
   1547 * Return: zero on success, -ENOMEM if no memory is available.
   1548 */
   1549static int es58x_alloc_urb(struct es58x_device *es58x_dev, struct urb **urb,
   1550			   u8 **buf, size_t buf_len, gfp_t mem_flags)
   1551{
   1552	*urb = usb_alloc_urb(0, mem_flags);
   1553	if (!*urb) {
   1554		dev_err(es58x_dev->dev, "No memory left for URBs\n");
   1555		return -ENOMEM;
   1556	}
   1557
   1558	*buf = usb_alloc_coherent(es58x_dev->udev, buf_len,
   1559				  mem_flags, &(*urb)->transfer_dma);
   1560	if (!*buf) {
   1561		dev_err(es58x_dev->dev, "No memory left for USB buffer\n");
   1562		usb_free_urb(*urb);
   1563		return -ENOMEM;
   1564	}
   1565
   1566	(*urb)->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
   1567
   1568	return 0;
   1569}
   1570
   1571/**
   1572 * es58x_get_tx_urb() - Get an URB for transmission.
   1573 * @es58x_dev: ES58X device.
   1574 *
   1575 * Gets an URB from the idle urbs anchor or allocate a new one if the
   1576 * anchor is empty.
   1577 *
   1578 * If there are more than ES58X_TX_URBS_MAX in the idle anchor, do
   1579 * some garbage collection. The garbage collection is done here
   1580 * instead of within es58x_write_bulk_callback() because
   1581 * usb_free_coherent() should not be used in IRQ context:
   1582 * c.f. WARN_ON(irqs_disabled()) in dma_free_attrs().
   1583 *
   1584 * Return: a pointer to an URB on success, NULL if no memory is
   1585 * available.
   1586 */
   1587static struct urb *es58x_get_tx_urb(struct es58x_device *es58x_dev)
   1588{
   1589	atomic_t *idle_cnt = &es58x_dev->tx_urbs_idle_cnt;
   1590	struct urb *urb = usb_get_from_anchor(&es58x_dev->tx_urbs_idle);
   1591
   1592	if (!urb) {
   1593		size_t tx_buf_len;
   1594		u8 *buf;
   1595
   1596		tx_buf_len = es58x_dev->param->tx_urb_cmd_max_len;
   1597		if (es58x_alloc_urb(es58x_dev, &urb, &buf, tx_buf_len,
   1598				    GFP_ATOMIC))
   1599			return NULL;
   1600
   1601		usb_fill_bulk_urb(urb, es58x_dev->udev, es58x_dev->tx_pipe,
   1602				  buf, tx_buf_len, NULL, NULL);
   1603		return urb;
   1604	}
   1605
   1606	while (atomic_dec_return(idle_cnt) > ES58X_TX_URBS_MAX) {
   1607		/* Garbage collector */
   1608		struct urb *tmp = usb_get_from_anchor(&es58x_dev->tx_urbs_idle);
   1609
   1610		if (!tmp)
   1611			break;
   1612		usb_free_coherent(tmp->dev,
   1613				  es58x_dev->param->tx_urb_cmd_max_len,
   1614				  tmp->transfer_buffer, tmp->transfer_dma);
   1615		usb_free_urb(tmp);
   1616	}
   1617
   1618	return urb;
   1619}
   1620
   1621/**
   1622 * es58x_submit_urb() - Send data to the device.
   1623 * @es58x_dev: ES58X device.
   1624 * @urb: URB to be sent.
   1625 * @netdev: CAN network device.
   1626 *
   1627 * Return: zero on success, errno when any error occurs.
   1628 */
   1629static int es58x_submit_urb(struct es58x_device *es58x_dev, struct urb *urb,
   1630			    struct net_device *netdev)
   1631{
   1632	int ret;
   1633
   1634	es58x_set_crc(urb->transfer_buffer, urb->transfer_buffer_length);
   1635	usb_fill_bulk_urb(urb, es58x_dev->udev, es58x_dev->tx_pipe,
   1636			  urb->transfer_buffer, urb->transfer_buffer_length,
   1637			  es58x_write_bulk_callback, netdev);
   1638	usb_anchor_urb(urb, &es58x_dev->tx_urbs_busy);
   1639	ret = usb_submit_urb(urb, GFP_ATOMIC);
   1640	if (ret) {
   1641		netdev_err(netdev, "%s: USB send urb failure: %pe\n",
   1642			   __func__, ERR_PTR(ret));
   1643		usb_unanchor_urb(urb);
   1644		usb_free_coherent(urb->dev,
   1645				  es58x_dev->param->tx_urb_cmd_max_len,
   1646				  urb->transfer_buffer, urb->transfer_dma);
   1647	}
   1648	usb_free_urb(urb);
   1649
   1650	return ret;
   1651}
   1652
   1653/**
   1654 * es58x_send_msg() - Prepare an URB and submit it.
   1655 * @es58x_dev: ES58X device.
   1656 * @cmd_type: Command type.
   1657 * @cmd_id: Command ID.
   1658 * @msg: ES58X message to be sent.
   1659 * @msg_len: Length of @msg.
   1660 * @channel_idx: Index of the network device.
   1661 *
   1662 * Creates an URB command from a given message, sets the header and the
   1663 * CRC and then submits it.
   1664 *
   1665 * Return: zero on success, errno when any error occurs.
   1666 */
   1667int es58x_send_msg(struct es58x_device *es58x_dev, u8 cmd_type, u8 cmd_id,
   1668		   const void *msg, u16 msg_len, int channel_idx)
   1669{
   1670	struct net_device *netdev;
   1671	union es58x_urb_cmd *urb_cmd;
   1672	struct urb *urb;
   1673	int urb_cmd_len;
   1674
   1675	if (channel_idx == ES58X_CHANNEL_IDX_NA)
   1676		netdev = es58x_dev->netdev[0];	/* Default to first channel */
   1677	else
   1678		netdev = es58x_dev->netdev[channel_idx];
   1679
   1680	urb_cmd_len = es58x_get_urb_cmd_len(es58x_dev, msg_len);
   1681	if (urb_cmd_len > es58x_dev->param->tx_urb_cmd_max_len)
   1682		return -EOVERFLOW;
   1683
   1684	urb = es58x_get_tx_urb(es58x_dev);
   1685	if (!urb)
   1686		return -ENOMEM;
   1687
   1688	urb_cmd = urb->transfer_buffer;
   1689	es58x_dev->ops->fill_urb_header(urb_cmd, cmd_type, cmd_id,
   1690					channel_idx, msg_len);
   1691	memcpy(&urb_cmd->raw_cmd[es58x_dev->param->urb_cmd_header_len],
   1692	       msg, msg_len);
   1693	urb->transfer_buffer_length = urb_cmd_len;
   1694
   1695	return es58x_submit_urb(es58x_dev, urb, netdev);
   1696}
   1697
   1698/**
   1699 * es58x_alloc_rx_urbs() - Allocate RX URBs.
   1700 * @es58x_dev: ES58X device.
   1701 *
   1702 * Allocate URBs for reception and anchor them.
   1703 *
   1704 * Return: zero on success, errno when any error occurs.
   1705 */
   1706static int es58x_alloc_rx_urbs(struct es58x_device *es58x_dev)
   1707{
   1708	const struct device *dev = es58x_dev->dev;
   1709	const struct es58x_parameters *param = es58x_dev->param;
   1710	size_t rx_buf_len = es58x_dev->rx_max_packet_size;
   1711	struct urb *urb;
   1712	u8 *buf;
   1713	int i;
   1714	int ret = -EINVAL;
   1715
   1716	for (i = 0; i < param->rx_urb_max; i++) {
   1717		ret = es58x_alloc_urb(es58x_dev, &urb, &buf, rx_buf_len,
   1718				      GFP_KERNEL);
   1719		if (ret)
   1720			break;
   1721
   1722		usb_fill_bulk_urb(urb, es58x_dev->udev, es58x_dev->rx_pipe,
   1723				  buf, rx_buf_len, es58x_read_bulk_callback,
   1724				  es58x_dev);
   1725		usb_anchor_urb(urb, &es58x_dev->rx_urbs);
   1726
   1727		ret = usb_submit_urb(urb, GFP_KERNEL);
   1728		if (ret) {
   1729			usb_unanchor_urb(urb);
   1730			usb_free_coherent(es58x_dev->udev, rx_buf_len,
   1731					  buf, urb->transfer_dma);
   1732			usb_free_urb(urb);
   1733			break;
   1734		}
   1735		usb_free_urb(urb);
   1736	}
   1737
   1738	if (i == 0) {
   1739		dev_err(dev, "%s: Could not setup any rx URBs\n", __func__);
   1740		return ret;
   1741	}
   1742	dev_dbg(dev, "%s: Allocated %d rx URBs each of size %zu\n",
   1743		__func__, i, rx_buf_len);
   1744
   1745	return ret;
   1746}
   1747
   1748/**
   1749 * es58x_free_urbs() - Free all the TX and RX URBs.
   1750 * @es58x_dev: ES58X device.
   1751 */
   1752static void es58x_free_urbs(struct es58x_device *es58x_dev)
   1753{
   1754	struct urb *urb;
   1755
   1756	if (!usb_wait_anchor_empty_timeout(&es58x_dev->tx_urbs_busy, 1000)) {
   1757		dev_err(es58x_dev->dev, "%s: Timeout, some TX urbs still remain\n",
   1758			__func__);
   1759		usb_kill_anchored_urbs(&es58x_dev->tx_urbs_busy);
   1760	}
   1761
   1762	while ((urb = usb_get_from_anchor(&es58x_dev->tx_urbs_idle)) != NULL) {
   1763		usb_free_coherent(urb->dev, es58x_dev->param->tx_urb_cmd_max_len,
   1764				  urb->transfer_buffer, urb->transfer_dma);
   1765		usb_free_urb(urb);
   1766		atomic_dec(&es58x_dev->tx_urbs_idle_cnt);
   1767	}
   1768	if (atomic_read(&es58x_dev->tx_urbs_idle_cnt))
   1769		dev_err(es58x_dev->dev,
   1770			"All idle urbs were freed but tx_urb_idle_cnt is %d\n",
   1771			atomic_read(&es58x_dev->tx_urbs_idle_cnt));
   1772
   1773	usb_kill_anchored_urbs(&es58x_dev->rx_urbs);
   1774}
   1775
   1776/**
   1777 * es58x_open() - Enable the network device.
   1778 * @netdev: CAN network device.
   1779 *
   1780 * Called when the network transitions to the up state. Allocate the
   1781 * URB resources if needed and open the channel.
   1782 *
   1783 * Return: zero on success, errno when any error occurs.
   1784 */
   1785static int es58x_open(struct net_device *netdev)
   1786{
   1787	struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev;
   1788	int ret;
   1789
   1790	if (!es58x_dev->opened_channel_cnt) {
   1791		ret = es58x_alloc_rx_urbs(es58x_dev);
   1792		if (ret)
   1793			return ret;
   1794
   1795		ret = es58x_set_realtime_diff_ns(es58x_dev);
   1796		if (ret)
   1797			goto free_urbs;
   1798	}
   1799
   1800	ret = open_candev(netdev);
   1801	if (ret)
   1802		goto free_urbs;
   1803
   1804	ret = es58x_dev->ops->enable_channel(es58x_priv(netdev));
   1805	if (ret)
   1806		goto free_urbs;
   1807
   1808	es58x_dev->opened_channel_cnt++;
   1809	netif_start_queue(netdev);
   1810
   1811	return ret;
   1812
   1813 free_urbs:
   1814	if (!es58x_dev->opened_channel_cnt)
   1815		es58x_free_urbs(es58x_dev);
   1816	netdev_err(netdev, "%s: Could not open the network device: %pe\n",
   1817		   __func__, ERR_PTR(ret));
   1818
   1819	return ret;
   1820}
   1821
   1822/**
   1823 * es58x_stop() - Disable the network device.
   1824 * @netdev: CAN network device.
   1825 *
   1826 * Called when the network transitions to the down state. If all the
   1827 * channels of the device are closed, free the URB resources which are
   1828 * not needed anymore.
   1829 *
   1830 * Return: zero on success, errno when any error occurs.
   1831 */
   1832static int es58x_stop(struct net_device *netdev)
   1833{
   1834	struct es58x_priv *priv = es58x_priv(netdev);
   1835	struct es58x_device *es58x_dev = priv->es58x_dev;
   1836	int ret;
   1837
   1838	netif_stop_queue(netdev);
   1839	ret = es58x_dev->ops->disable_channel(priv);
   1840	if (ret)
   1841		return ret;
   1842
   1843	priv->can.state = CAN_STATE_STOPPED;
   1844	es58x_can_reset_echo_fifo(netdev);
   1845	close_candev(netdev);
   1846
   1847	es58x_flush_pending_tx_msg(netdev);
   1848
   1849	es58x_dev->opened_channel_cnt--;
   1850	if (!es58x_dev->opened_channel_cnt)
   1851		es58x_free_urbs(es58x_dev);
   1852
   1853	return 0;
   1854}
   1855
   1856/**
   1857 * es58x_xmit_commit() - Send the bulk urb.
   1858 * @netdev: CAN network device.
   1859 *
   1860 * Do the bulk send. This function should be called only once by bulk
   1861 * transmission.
   1862 *
   1863 * Return: zero on success, errno when any error occurs.
   1864 */
   1865static int es58x_xmit_commit(struct net_device *netdev)
   1866{
   1867	struct es58x_priv *priv = es58x_priv(netdev);
   1868	int ret;
   1869
   1870	if (!es58x_is_can_state_active(netdev))
   1871		return -ENETDOWN;
   1872
   1873	if (es58x_is_echo_skb_threshold_reached(priv))
   1874		netif_stop_queue(netdev);
   1875
   1876	ret = es58x_submit_urb(priv->es58x_dev, priv->tx_urb, netdev);
   1877	if (ret == 0)
   1878		priv->tx_urb = NULL;
   1879
   1880	return ret;
   1881}
   1882
   1883/**
   1884 * es58x_xmit_more() - Can we put more packets?
   1885 * @priv: ES58X private parameters related to the network device.
   1886 *
   1887 * Return: true if we can put more, false if it is time to send.
   1888 */
   1889static bool es58x_xmit_more(struct es58x_priv *priv)
   1890{
   1891	unsigned int free_slots =
   1892	    priv->can.echo_skb_max - (priv->tx_head - priv->tx_tail);
   1893
   1894	return netdev_xmit_more() && free_slots > 0 &&
   1895		priv->tx_can_msg_cnt < priv->es58x_dev->param->tx_bulk_max;
   1896}
   1897
   1898/**
   1899 * es58x_start_xmit() - Transmit an skb.
   1900 * @skb: socket buffer of a CAN message.
   1901 * @netdev: CAN network device.
   1902 *
   1903 * Called when a packet needs to be transmitted.
   1904 *
   1905 * This function relies on Byte Queue Limits (BQL). The main benefit
   1906 * is to increase the throughput by allowing bulk transfers
   1907 * (c.f. xmit_more flag).
   1908 *
   1909 * Queues up to tx_bulk_max messages in &tx_urb buffer and does
   1910 * a bulk send of all messages in one single URB.
   1911 *
   1912 * Return: NETDEV_TX_OK regardless of if we could transmit the @skb or
   1913 *	had to drop it.
   1914 */
   1915static netdev_tx_t es58x_start_xmit(struct sk_buff *skb,
   1916				    struct net_device *netdev)
   1917{
   1918	struct es58x_priv *priv = es58x_priv(netdev);
   1919	struct es58x_device *es58x_dev = priv->es58x_dev;
   1920	unsigned int frame_len;
   1921	int ret;
   1922
   1923	if (can_dropped_invalid_skb(netdev, skb)) {
   1924		if (priv->tx_urb)
   1925			goto xmit_commit;
   1926		return NETDEV_TX_OK;
   1927	}
   1928
   1929	if (priv->tx_urb && priv->tx_can_msg_is_fd != can_is_canfd_skb(skb)) {
   1930		/* Can not do bulk send with mixed CAN and CAN FD frames. */
   1931		ret = es58x_xmit_commit(netdev);
   1932		if (ret)
   1933			goto drop_skb;
   1934	}
   1935
   1936	if (!priv->tx_urb) {
   1937		priv->tx_urb = es58x_get_tx_urb(es58x_dev);
   1938		if (!priv->tx_urb) {
   1939			ret = -ENOMEM;
   1940			goto drop_skb;
   1941		}
   1942		priv->tx_can_msg_cnt = 0;
   1943		priv->tx_can_msg_is_fd = can_is_canfd_skb(skb);
   1944	}
   1945
   1946	ret = es58x_dev->ops->tx_can_msg(priv, skb);
   1947	if (ret)
   1948		goto drop_skb;
   1949
   1950	frame_len = can_skb_get_frame_len(skb);
   1951	ret = can_put_echo_skb(skb, netdev,
   1952			       priv->tx_head & es58x_dev->param->fifo_mask,
   1953			       frame_len);
   1954	if (ret)
   1955		goto xmit_failure;
   1956	netdev_sent_queue(netdev, frame_len);
   1957
   1958	priv->tx_head++;
   1959	priv->tx_can_msg_cnt++;
   1960
   1961 xmit_commit:
   1962	if (!es58x_xmit_more(priv)) {
   1963		ret = es58x_xmit_commit(netdev);
   1964		if (ret)
   1965			goto xmit_failure;
   1966	}
   1967
   1968	return NETDEV_TX_OK;
   1969
   1970 drop_skb:
   1971	dev_kfree_skb(skb);
   1972	netdev->stats.tx_dropped++;
   1973 xmit_failure:
   1974	netdev_warn(netdev, "%s: send message failure: %pe\n",
   1975		    __func__, ERR_PTR(ret));
   1976	netdev->stats.tx_errors++;
   1977	es58x_flush_pending_tx_msg(netdev);
   1978	return NETDEV_TX_OK;
   1979}
   1980
   1981static const struct net_device_ops es58x_netdev_ops = {
   1982	.ndo_open = es58x_open,
   1983	.ndo_stop = es58x_stop,
   1984	.ndo_start_xmit = es58x_start_xmit
   1985};
   1986
   1987/**
   1988 * es58x_set_mode() - Change network device mode.
   1989 * @netdev: CAN network device.
   1990 * @mode: either %CAN_MODE_START, %CAN_MODE_STOP or %CAN_MODE_SLEEP
   1991 *
   1992 * Currently, this function is only used to stop and restart the
   1993 * channel during a bus off event (c.f. es58x_rx_err_msg() and
   1994 * drivers/net/can/dev.c:can_restart() which are the two only
   1995 * callers).
   1996 *
   1997 * Return: zero on success, errno when any error occurs.
   1998 */
   1999static int es58x_set_mode(struct net_device *netdev, enum can_mode mode)
   2000{
   2001	struct es58x_priv *priv = es58x_priv(netdev);
   2002
   2003	switch (mode) {
   2004	case CAN_MODE_START:
   2005		switch (priv->can.state) {
   2006		case CAN_STATE_BUS_OFF:
   2007			return priv->es58x_dev->ops->enable_channel(priv);
   2008
   2009		case CAN_STATE_STOPPED:
   2010			return es58x_open(netdev);
   2011
   2012		case CAN_STATE_ERROR_ACTIVE:
   2013		case CAN_STATE_ERROR_WARNING:
   2014		case CAN_STATE_ERROR_PASSIVE:
   2015		default:
   2016			return 0;
   2017		}
   2018
   2019	case CAN_MODE_STOP:
   2020		switch (priv->can.state) {
   2021		case CAN_STATE_STOPPED:
   2022			return 0;
   2023
   2024		case CAN_STATE_ERROR_ACTIVE:
   2025		case CAN_STATE_ERROR_WARNING:
   2026		case CAN_STATE_ERROR_PASSIVE:
   2027		case CAN_STATE_BUS_OFF:
   2028		default:
   2029			return priv->es58x_dev->ops->disable_channel(priv);
   2030		}
   2031
   2032	case CAN_MODE_SLEEP:
   2033	default:
   2034		return -EOPNOTSUPP;
   2035	}
   2036}
   2037
   2038/**
   2039 * es58x_init_priv() - Initialize private parameters.
   2040 * @es58x_dev: ES58X device.
   2041 * @priv: ES58X private parameters related to the network device.
   2042 * @channel_idx: Index of the network device.
   2043 */
   2044static void es58x_init_priv(struct es58x_device *es58x_dev,
   2045			    struct es58x_priv *priv, int channel_idx)
   2046{
   2047	const struct es58x_parameters *param = es58x_dev->param;
   2048	struct can_priv *can = &priv->can;
   2049
   2050	priv->es58x_dev = es58x_dev;
   2051	priv->channel_idx = channel_idx;
   2052	priv->tx_urb = NULL;
   2053	priv->tx_can_msg_cnt = 0;
   2054
   2055	can->bittiming_const = param->bittiming_const;
   2056	if (param->ctrlmode_supported & CAN_CTRLMODE_FD) {
   2057		can->data_bittiming_const = param->data_bittiming_const;
   2058		can->tdc_const = param->tdc_const;
   2059	}
   2060	can->bitrate_max = param->bitrate_max;
   2061	can->clock = param->clock;
   2062	can->state = CAN_STATE_STOPPED;
   2063	can->ctrlmode_supported = param->ctrlmode_supported;
   2064	can->do_set_mode = es58x_set_mode;
   2065}
   2066
   2067/**
   2068 * es58x_init_netdev() - Initialize the network device.
   2069 * @es58x_dev: ES58X device.
   2070 * @channel_idx: Index of the network device.
   2071 *
   2072 * Return: zero on success, errno when any error occurs.
   2073 */
   2074static int es58x_init_netdev(struct es58x_device *es58x_dev, int channel_idx)
   2075{
   2076	struct net_device *netdev;
   2077	struct device *dev = es58x_dev->dev;
   2078	int ret;
   2079
   2080	netdev = alloc_candev(sizeof(struct es58x_priv),
   2081			      es58x_dev->param->fifo_mask + 1);
   2082	if (!netdev) {
   2083		dev_err(dev, "Could not allocate candev\n");
   2084		return -ENOMEM;
   2085	}
   2086	SET_NETDEV_DEV(netdev, dev);
   2087	es58x_dev->netdev[channel_idx] = netdev;
   2088	es58x_init_priv(es58x_dev, es58x_priv(netdev), channel_idx);
   2089
   2090	netdev->netdev_ops = &es58x_netdev_ops;
   2091	netdev->flags |= IFF_ECHO;	/* We support local echo */
   2092	netdev->dev_port = channel_idx;
   2093
   2094	ret = register_candev(netdev);
   2095	if (ret)
   2096		return ret;
   2097
   2098	netdev_queue_set_dql_min_limit(netdev_get_tx_queue(netdev, 0),
   2099				       es58x_dev->param->dql_min_limit);
   2100
   2101	return ret;
   2102}
   2103
   2104/**
   2105 * es58x_free_netdevs() - Release all network resources of the device.
   2106 * @es58x_dev: ES58X device.
   2107 */
   2108static void es58x_free_netdevs(struct es58x_device *es58x_dev)
   2109{
   2110	int i;
   2111
   2112	for (i = 0; i < es58x_dev->num_can_ch; i++) {
   2113		struct net_device *netdev = es58x_dev->netdev[i];
   2114
   2115		if (!netdev)
   2116			continue;
   2117		unregister_candev(netdev);
   2118		es58x_dev->netdev[i] = NULL;
   2119		free_candev(netdev);
   2120	}
   2121}
   2122
   2123/**
   2124 * es58x_get_product_info() - Get the product information and print them.
   2125 * @es58x_dev: ES58X device.
   2126 *
   2127 * Do a synchronous call to get the product information.
   2128 *
   2129 * Return: zero on success, errno when any error occurs.
   2130 */
   2131static int es58x_get_product_info(struct es58x_device *es58x_dev)
   2132{
   2133	struct usb_device *udev = es58x_dev->udev;
   2134	const int es58x_prod_info_idx = 6;
   2135	/* Empirical tests show a prod_info length of maximum 83,
   2136	 * below should be more than enough.
   2137	 */
   2138	const size_t prod_info_len = 127;
   2139	char *prod_info;
   2140	int ret;
   2141
   2142	prod_info = kmalloc(prod_info_len, GFP_KERNEL);
   2143	if (!prod_info)
   2144		return -ENOMEM;
   2145
   2146	ret = usb_string(udev, es58x_prod_info_idx, prod_info, prod_info_len);
   2147	if (ret < 0) {
   2148		dev_err(es58x_dev->dev,
   2149			"%s: Could not read the product info: %pe\n",
   2150			__func__, ERR_PTR(ret));
   2151		goto out_free;
   2152	}
   2153	if (ret >= prod_info_len - 1) {
   2154		dev_warn(es58x_dev->dev,
   2155			 "%s: Buffer is too small, result might be truncated\n",
   2156			 __func__);
   2157	}
   2158	dev_info(es58x_dev->dev, "Product info: %s\n", prod_info);
   2159
   2160 out_free:
   2161	kfree(prod_info);
   2162	return ret < 0 ? ret : 0;
   2163}
   2164
   2165/**
   2166 * es58x_init_es58x_dev() - Initialize the ES58X device.
   2167 * @intf: USB interface.
   2168 * @driver_info: Quirks of the device.
   2169 *
   2170 * Return: pointer to an ES58X device on success, error pointer when
   2171 *	any error occurs.
   2172 */
   2173static struct es58x_device *es58x_init_es58x_dev(struct usb_interface *intf,
   2174						 kernel_ulong_t driver_info)
   2175{
   2176	struct device *dev = &intf->dev;
   2177	struct es58x_device *es58x_dev;
   2178	const struct es58x_parameters *param;
   2179	const struct es58x_operators *ops;
   2180	struct usb_device *udev = interface_to_usbdev(intf);
   2181	struct usb_endpoint_descriptor *ep_in, *ep_out;
   2182	int ret;
   2183
   2184	dev_info(dev,
   2185		 "Starting %s %s (Serial Number %s) driver version %s\n",
   2186		 udev->manufacturer, udev->product, udev->serial, DRV_VERSION);
   2187
   2188	ret = usb_find_common_endpoints(intf->cur_altsetting, &ep_in, &ep_out,
   2189					NULL, NULL);
   2190	if (ret)
   2191		return ERR_PTR(ret);
   2192
   2193	if (driver_info & ES58X_FD_FAMILY) {
   2194		param = &es58x_fd_param;
   2195		ops = &es58x_fd_ops;
   2196	} else {
   2197		param = &es581_4_param;
   2198		ops = &es581_4_ops;
   2199	}
   2200
   2201	es58x_dev = devm_kzalloc(dev, es58x_sizeof_es58x_device(param),
   2202				 GFP_KERNEL);
   2203	if (!es58x_dev)
   2204		return ERR_PTR(-ENOMEM);
   2205
   2206	es58x_dev->param = param;
   2207	es58x_dev->ops = ops;
   2208	es58x_dev->dev = dev;
   2209	es58x_dev->udev = udev;
   2210
   2211	if (driver_info & ES58X_DUAL_CHANNEL)
   2212		es58x_dev->num_can_ch = 2;
   2213	else
   2214		es58x_dev->num_can_ch = 1;
   2215
   2216	init_usb_anchor(&es58x_dev->rx_urbs);
   2217	init_usb_anchor(&es58x_dev->tx_urbs_idle);
   2218	init_usb_anchor(&es58x_dev->tx_urbs_busy);
   2219	atomic_set(&es58x_dev->tx_urbs_idle_cnt, 0);
   2220	usb_set_intfdata(intf, es58x_dev);
   2221
   2222	es58x_dev->rx_pipe = usb_rcvbulkpipe(es58x_dev->udev,
   2223					     ep_in->bEndpointAddress);
   2224	es58x_dev->tx_pipe = usb_sndbulkpipe(es58x_dev->udev,
   2225					     ep_out->bEndpointAddress);
   2226	es58x_dev->rx_max_packet_size = le16_to_cpu(ep_in->wMaxPacketSize);
   2227
   2228	return es58x_dev;
   2229}
   2230
   2231/**
   2232 * es58x_probe() - Initialize the USB device.
   2233 * @intf: USB interface.
   2234 * @id: USB device ID.
   2235 *
   2236 * Return: zero on success, -ENODEV if the interface is not supported
   2237 * or errno when any other error occurs.
   2238 */
   2239static int es58x_probe(struct usb_interface *intf,
   2240		       const struct usb_device_id *id)
   2241{
   2242	struct es58x_device *es58x_dev;
   2243	int ch_idx, ret;
   2244
   2245	es58x_dev = es58x_init_es58x_dev(intf, id->driver_info);
   2246	if (IS_ERR(es58x_dev))
   2247		return PTR_ERR(es58x_dev);
   2248
   2249	ret = es58x_get_product_info(es58x_dev);
   2250	if (ret)
   2251		return ret;
   2252
   2253	for (ch_idx = 0; ch_idx < es58x_dev->num_can_ch; ch_idx++) {
   2254		ret = es58x_init_netdev(es58x_dev, ch_idx);
   2255		if (ret) {
   2256			es58x_free_netdevs(es58x_dev);
   2257			return ret;
   2258		}
   2259	}
   2260
   2261	return ret;
   2262}
   2263
   2264/**
   2265 * es58x_disconnect() - Disconnect the USB device.
   2266 * @intf: USB interface
   2267 *
   2268 * Called by the usb core when driver is unloaded or device is
   2269 * removed.
   2270 */
   2271static void es58x_disconnect(struct usb_interface *intf)
   2272{
   2273	struct es58x_device *es58x_dev = usb_get_intfdata(intf);
   2274
   2275	dev_info(&intf->dev, "Disconnecting %s %s\n",
   2276		 es58x_dev->udev->manufacturer, es58x_dev->udev->product);
   2277
   2278	es58x_free_netdevs(es58x_dev);
   2279	es58x_free_urbs(es58x_dev);
   2280	usb_set_intfdata(intf, NULL);
   2281}
   2282
   2283static struct usb_driver es58x_driver = {
   2284	.name = ES58X_MODULE_NAME,
   2285	.probe = es58x_probe,
   2286	.disconnect = es58x_disconnect,
   2287	.id_table = es58x_id_table
   2288};
   2289
   2290module_usb_driver(es58x_driver);