0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef KVASER_USB_H
0015 #define KVASER_USB_H
0016
0017
0018
0019
0020
0021
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
0035 #define KVASER_USB_RX_BUFFER_SIZE 3072
0036 #define KVASER_USB_MAX_NET_DEVICES 5
0037
0038
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
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;
0061 u16 transid;
0062
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
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
0090
0091
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;
0115 int active_tx_contexts;
0116 struct kvaser_usb_tx_urb_context tx_contexts[];
0117 };
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
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