Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Parts of this driver are based on the following:
0003  *  - Kvaser linux leaf driver (version 4.78)
0004  *  - CAN driver for esd CAN-USB/2
0005  *  - Kvaser linux usbcanII driver (version 5.3)
0006  *  - Kvaser linux mhydra driver (version 5.24)
0007  *
0008  * Copyright (C) 2002-2018 KVASER AB, Sweden. All rights reserved.
0009  * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
0010  * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be>
0011  * Copyright (C) 2015 Valeo S.A.
0012  */
0013 
0014 #ifndef KVASER_USB_H
0015 #define KVASER_USB_H
0016 
0017 /* Kvaser USB CAN dongles are divided into three major platforms:
0018  * - Hydra: Running firmware labeled as 'mhydra'
0019  * - Leaf: Based on Renesas M32C or Freescale i.MX28, running firmware labeled
0020  *         as 'filo'
0021  * - UsbcanII: Based on Renesas M16C, running firmware labeled as 'helios'
0022  */
0023 
0024 #include <linux/completion.h>
0025 #include <linux/spinlock.h>
0026 #include <linux/types.h>
0027 #include <linux/usb.h>
0028 
0029 #include <linux/can.h>
0030 #include <linux/can/dev.h>
0031 
0032 #define KVASER_USB_MAX_RX_URBS          4
0033 #define KVASER_USB_MAX_TX_URBS          128
0034 #define KVASER_USB_TIMEOUT          1000 /* msecs */
0035 #define KVASER_USB_RX_BUFFER_SIZE       3072
0036 #define KVASER_USB_MAX_NET_DEVICES      5
0037 
0038 /* Kvaser USB device quirks */
0039 #define KVASER_USB_QUIRK_HAS_SILENT_MODE    BIT(0)
0040 #define KVASER_USB_QUIRK_HAS_TXRX_ERRORS    BIT(1)
0041 #define KVASER_USB_QUIRK_IGNORE_CLK_FREQ    BIT(2)
0042 #define KVASER_USB_QUIRK_HAS_HARDWARE_TIMESTAMP BIT(3)
0043 
0044 /* Device capabilities */
0045 #define KVASER_USB_CAP_BERR_CAP         0x01
0046 #define KVASER_USB_CAP_EXT_CAP          0x02
0047 #define KVASER_USB_HYDRA_CAP_EXT_CMD        0x04
0048 
0049 struct kvaser_usb_dev_cfg;
0050 
0051 enum kvaser_usb_leaf_family {
0052     KVASER_LEAF,
0053     KVASER_USBCAN,
0054 };
0055 
0056 #define KVASER_USB_HYDRA_MAX_CMD_LEN        128
0057 struct kvaser_usb_dev_card_data_hydra {
0058     u8 channel_to_he[KVASER_USB_MAX_NET_DEVICES];
0059     u8 sysdbg_he;
0060     spinlock_t transid_lock; /* lock for transid */
0061     u16 transid;
0062     /* lock for usb_rx_leftover and usb_rx_leftover_len */
0063     spinlock_t usb_rx_leftover_lock;
0064     u8 usb_rx_leftover[KVASER_USB_HYDRA_MAX_CMD_LEN];
0065     u8 usb_rx_leftover_len;
0066 };
0067 struct kvaser_usb_dev_card_data {
0068     u32 ctrlmode_supported;
0069     u32 capabilities;
0070     struct kvaser_usb_dev_card_data_hydra hydra;
0071 };
0072 
0073 /* Context for an outstanding, not yet ACKed, transmission */
0074 struct kvaser_usb_tx_urb_context {
0075     struct kvaser_usb_net_priv *priv;
0076     u32 echo_index;
0077 };
0078 
0079 struct kvaser_usb {
0080     struct usb_device *udev;
0081     struct usb_interface *intf;
0082     struct kvaser_usb_net_priv *nets[KVASER_USB_MAX_NET_DEVICES];
0083     const struct kvaser_usb_driver_info *driver_info;
0084     const struct kvaser_usb_dev_cfg *cfg;
0085 
0086     struct usb_endpoint_descriptor *bulk_in, *bulk_out;
0087     struct usb_anchor rx_submitted;
0088 
0089     /* @max_tx_urbs: Firmware-reported maximum number of outstanding,
0090      * not yet ACKed, transmissions on this device. This value is
0091      * also used as a sentinel for marking free tx contexts.
0092      */
0093     u32 fw_version;
0094     unsigned int nchannels;
0095     unsigned int max_tx_urbs;
0096     struct kvaser_usb_dev_card_data card_data;
0097 
0098     bool rxinitdone;
0099     void *rxbuf[KVASER_USB_MAX_RX_URBS];
0100     dma_addr_t rxbuf_dma[KVASER_USB_MAX_RX_URBS];
0101 };
0102 
0103 struct kvaser_usb_net_priv {
0104     struct can_priv can;
0105     struct can_berr_counter bec;
0106 
0107     struct kvaser_usb *dev;
0108     struct net_device *netdev;
0109     int channel;
0110 
0111     struct completion start_comp, stop_comp, flush_comp;
0112     struct usb_anchor tx_submitted;
0113 
0114     spinlock_t tx_contexts_lock; /* lock for active_tx_contexts */
0115     int active_tx_contexts;
0116     struct kvaser_usb_tx_urb_context tx_contexts[];
0117 };
0118 
0119 /**
0120  * struct kvaser_usb_dev_ops - Device specific functions
0121  * @dev_set_mode:       used for can.do_set_mode
0122  * @dev_set_bittiming:      used for can.do_set_bittiming
0123  * @dev_set_data_bittiming: used for can.do_set_data_bittiming
0124  * @dev_get_berr_counter:   used for can.do_get_berr_counter
0125  *
0126  * @dev_setup_endpoints:    setup USB in and out endpoints
0127  * @dev_init_card:      initialize card
0128  * @dev_get_software_info:  get software info
0129  * @dev_get_software_details:   get software details
0130  * @dev_get_card_info:      get card info
0131  * @dev_get_capabilities:   discover device capabilities
0132  *
0133  * @dev_set_opt_mode:       set ctrlmod
0134  * @dev_start_chip:     start the CAN controller
0135  * @dev_stop_chip:      stop the CAN controller
0136  * @dev_reset_chip:     reset the CAN controller
0137  * @dev_flush_queue:        flush outstanding CAN messages
0138  * @dev_read_bulk_callback: handle incoming commands
0139  * @dev_frame_to_cmd:       translate struct can_frame into device command
0140  */
0141 struct kvaser_usb_dev_ops {
0142     int (*dev_set_mode)(struct net_device *netdev, enum can_mode mode);
0143     int (*dev_set_bittiming)(struct net_device *netdev);
0144     int (*dev_set_data_bittiming)(struct net_device *netdev);
0145     int (*dev_get_berr_counter)(const struct net_device *netdev,
0146                     struct can_berr_counter *bec);
0147     int (*dev_setup_endpoints)(struct kvaser_usb *dev);
0148     int (*dev_init_card)(struct kvaser_usb *dev);
0149     int (*dev_get_software_info)(struct kvaser_usb *dev);
0150     int (*dev_get_software_details)(struct kvaser_usb *dev);
0151     int (*dev_get_card_info)(struct kvaser_usb *dev);
0152     int (*dev_get_capabilities)(struct kvaser_usb *dev);
0153     int (*dev_set_opt_mode)(const struct kvaser_usb_net_priv *priv);
0154     int (*dev_start_chip)(struct kvaser_usb_net_priv *priv);
0155     int (*dev_stop_chip)(struct kvaser_usb_net_priv *priv);
0156     int (*dev_reset_chip)(struct kvaser_usb *dev, int channel);
0157     int (*dev_flush_queue)(struct kvaser_usb_net_priv *priv);
0158     void (*dev_read_bulk_callback)(struct kvaser_usb *dev, void *buf,
0159                        int len);
0160     void *(*dev_frame_to_cmd)(const struct kvaser_usb_net_priv *priv,
0161                   const struct sk_buff *skb, int *cmd_len,
0162                   u16 transid);
0163 };
0164 
0165 struct kvaser_usb_driver_info {
0166     u32 quirks;
0167     enum kvaser_usb_leaf_family family;
0168     const struct kvaser_usb_dev_ops *ops;
0169 };
0170 
0171 struct kvaser_usb_dev_cfg {
0172     const struct can_clock clock;
0173     const unsigned int timestamp_freq;
0174     const struct can_bittiming_const * const bittiming_const;
0175     const struct can_bittiming_const * const data_bittiming_const;
0176 };
0177 
0178 extern const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops;
0179 extern const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops;
0180 
0181 int kvaser_usb_recv_cmd(const struct kvaser_usb *dev, void *cmd, int len,
0182             int *actual_len);
0183 
0184 int kvaser_usb_send_cmd(const struct kvaser_usb *dev, void *cmd, int len);
0185 
0186 int kvaser_usb_send_cmd_async(struct kvaser_usb_net_priv *priv, void *cmd,
0187                   int len);
0188 
0189 int kvaser_usb_can_rx_over_error(struct net_device *netdev);
0190 
0191 extern const struct can_bittiming_const kvaser_usb_flexc_bittiming_const;
0192 
0193 #endif /* KVASER_USB_H */