1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Parts of this driver are based on the following: 3 * - Kvaser linux leaf driver (version 4.78) 4 * - CAN driver for esd CAN-USB/2 5 * - Kvaser linux usbcanII driver (version 5.3) 6 * - Kvaser linux mhydra driver (version 5.24) 7 * 8 * Copyright (C) 2002-2018 KVASER AB, Sweden. All rights reserved. 9 * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh 10 * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be> 11 * Copyright (C) 2015 Valeo S.A. 12 */ 13 14 #ifndef KVASER_USB_H 15 #define KVASER_USB_H 16 17 /* Kvaser USB CAN dongles are divided into three major platforms: 18 * - Hydra: Running firmware labeled as 'mhydra' 19 * - Leaf: Based on Renesas M32C or Freescale i.MX28, running firmware labeled 20 * as 'filo' 21 * - UsbcanII: Based on Renesas M16C, running firmware labeled as 'helios' 22 */ 23 24 #include <linux/completion.h> 25 #include <linux/spinlock.h> 26 #include <linux/types.h> 27 #include <linux/usb.h> 28 29 #include <linux/can.h> 30 #include <linux/can/dev.h> 31 32 #define KVASER_USB_MAX_RX_URBS 4 33 #define KVASER_USB_MAX_TX_URBS 128 34 #define KVASER_USB_TIMEOUT 1000 /* msecs */ 35 #define KVASER_USB_RX_BUFFER_SIZE 3072 36 #define KVASER_USB_MAX_NET_DEVICES 5 37 38 /* Kvaser USB device quirks */ 39 #define KVASER_USB_QUIRK_HAS_SILENT_MODE BIT(0) 40 #define KVASER_USB_QUIRK_HAS_TXRX_ERRORS BIT(1) 41 #define KVASER_USB_QUIRK_IGNORE_CLK_FREQ BIT(2) 42 #define KVASER_USB_QUIRK_HAS_HARDWARE_TIMESTAMP BIT(3) 43 44 /* Device capabilities */ 45 #define KVASER_USB_CAP_BERR_CAP 0x01 46 #define KVASER_USB_CAP_EXT_CAP 0x02 47 #define KVASER_USB_HYDRA_CAP_EXT_CMD 0x04 48 49 struct kvaser_usb_dev_cfg; 50 51 enum kvaser_usb_leaf_family { 52 KVASER_LEAF, 53 KVASER_USBCAN, 54 }; 55 56 #define KVASER_USB_HYDRA_MAX_CMD_LEN 128 57 struct kvaser_usb_dev_card_data_hydra { 58 u8 channel_to_he[KVASER_USB_MAX_NET_DEVICES]; 59 u8 sysdbg_he; 60 spinlock_t transid_lock; /* lock for transid */ 61 u16 transid; 62 /* lock for usb_rx_leftover and usb_rx_leftover_len */ 63 spinlock_t usb_rx_leftover_lock; 64 u8 usb_rx_leftover[KVASER_USB_HYDRA_MAX_CMD_LEN]; 65 u8 usb_rx_leftover_len; 66 }; 67 struct kvaser_usb_dev_card_data { 68 u32 ctrlmode_supported; 69 u32 capabilities; 70 struct kvaser_usb_dev_card_data_hydra hydra; 71 }; 72 73 /* Context for an outstanding, not yet ACKed, transmission */ 74 struct kvaser_usb_tx_urb_context { 75 struct kvaser_usb_net_priv *priv; 76 u32 echo_index; 77 }; 78 79 struct kvaser_usb { 80 struct usb_device *udev; 81 struct usb_interface *intf; 82 struct kvaser_usb_net_priv *nets[KVASER_USB_MAX_NET_DEVICES]; 83 const struct kvaser_usb_driver_info *driver_info; 84 const struct kvaser_usb_dev_cfg *cfg; 85 86 struct usb_endpoint_descriptor *bulk_in, *bulk_out; 87 struct usb_anchor rx_submitted; 88 89 /* @max_tx_urbs: Firmware-reported maximum number of outstanding, 90 * not yet ACKed, transmissions on this device. This value is 91 * also used as a sentinel for marking free tx contexts. 92 */ 93 u32 fw_version; 94 unsigned int nchannels; 95 unsigned int max_tx_urbs; 96 struct kvaser_usb_dev_card_data card_data; 97 98 bool rxinitdone; 99 void *rxbuf[KVASER_USB_MAX_RX_URBS]; 100 dma_addr_t rxbuf_dma[KVASER_USB_MAX_RX_URBS]; 101 }; 102 103 struct kvaser_usb_net_priv { 104 struct can_priv can; 105 struct can_berr_counter bec; 106 107 struct kvaser_usb *dev; 108 struct net_device *netdev; 109 int channel; 110 111 struct completion start_comp, stop_comp, flush_comp; 112 struct usb_anchor tx_submitted; 113 114 spinlock_t tx_contexts_lock; /* lock for active_tx_contexts */ 115 int active_tx_contexts; 116 struct kvaser_usb_tx_urb_context tx_contexts[]; 117 }; 118 119 /** 120 * struct kvaser_usb_dev_ops - Device specific functions 121 * @dev_set_mode: used for can.do_set_mode 122 * @dev_set_bittiming: used for can.do_set_bittiming 123 * @dev_set_data_bittiming: used for can.do_set_data_bittiming 124 * @dev_get_berr_counter: used for can.do_get_berr_counter 125 * 126 * @dev_setup_endpoints: setup USB in and out endpoints 127 * @dev_init_card: initialize card 128 * @dev_get_software_info: get software info 129 * @dev_get_software_details: get software details 130 * @dev_get_card_info: get card info 131 * @dev_get_capabilities: discover device capabilities 132 * 133 * @dev_set_opt_mode: set ctrlmod 134 * @dev_start_chip: start the CAN controller 135 * @dev_stop_chip: stop the CAN controller 136 * @dev_reset_chip: reset the CAN controller 137 * @dev_flush_queue: flush outstanding CAN messages 138 * @dev_read_bulk_callback: handle incoming commands 139 * @dev_frame_to_cmd: translate struct can_frame into device command 140 */ 141 struct kvaser_usb_dev_ops { 142 int (*dev_set_mode)(struct net_device *netdev, enum can_mode mode); 143 int (*dev_set_bittiming)(struct net_device *netdev); 144 int (*dev_set_data_bittiming)(struct net_device *netdev); 145 int (*dev_get_berr_counter)(const struct net_device *netdev, 146 struct can_berr_counter *bec); 147 int (*dev_setup_endpoints)(struct kvaser_usb *dev); 148 int (*dev_init_card)(struct kvaser_usb *dev); 149 int (*dev_get_software_info)(struct kvaser_usb *dev); 150 int (*dev_get_software_details)(struct kvaser_usb *dev); 151 int (*dev_get_card_info)(struct kvaser_usb *dev); 152 int (*dev_get_capabilities)(struct kvaser_usb *dev); 153 int (*dev_set_opt_mode)(const struct kvaser_usb_net_priv *priv); 154 int (*dev_start_chip)(struct kvaser_usb_net_priv *priv); 155 int (*dev_stop_chip)(struct kvaser_usb_net_priv *priv); 156 int (*dev_reset_chip)(struct kvaser_usb *dev, int channel); 157 int (*dev_flush_queue)(struct kvaser_usb_net_priv *priv); 158 void (*dev_read_bulk_callback)(struct kvaser_usb *dev, void *buf, 159 int len); 160 void *(*dev_frame_to_cmd)(const struct kvaser_usb_net_priv *priv, 161 const struct sk_buff *skb, int *cmd_len, 162 u16 transid); 163 }; 164 165 struct kvaser_usb_driver_info { 166 u32 quirks; 167 enum kvaser_usb_leaf_family family; 168 const struct kvaser_usb_dev_ops *ops; 169 }; 170 171 struct kvaser_usb_dev_cfg { 172 const struct can_clock clock; 173 const unsigned int timestamp_freq; 174 const struct can_bittiming_const * const bittiming_const; 175 const struct can_bittiming_const * const data_bittiming_const; 176 }; 177 178 extern const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops; 179 extern const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops; 180 181 void kvaser_usb_unlink_tx_urbs(struct kvaser_usb_net_priv *priv); 182 183 int kvaser_usb_recv_cmd(const struct kvaser_usb *dev, void *cmd, int len, 184 int *actual_len); 185 186 int kvaser_usb_send_cmd(const struct kvaser_usb *dev, void *cmd, int len); 187 188 int kvaser_usb_send_cmd_async(struct kvaser_usb_net_priv *priv, void *cmd, 189 int len); 190 191 int kvaser_usb_can_rx_over_error(struct net_device *netdev); 192 193 extern const struct can_bittiming_const kvaser_usb_flexc_bittiming_const; 194 195 #endif /* KVASER_USB_H */ 196