kvaser_usb.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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. #ifndef KVASER_USB_H
  14. #define KVASER_USB_H
  15. /* Kvaser USB CAN dongles are divided into three major platforms:
  16. * - Hydra: Running firmware labeled as 'mhydra'
  17. * - Leaf: Based on Renesas M32C or Freescale i.MX28, running firmware labeled
  18. * as 'filo'
  19. * - UsbcanII: Based on Renesas M16C, running firmware labeled as 'helios'
  20. */
  21. #include <linux/completion.h>
  22. #include <linux/spinlock.h>
  23. #include <linux/types.h>
  24. #include <linux/usb.h>
  25. #include <linux/can.h>
  26. #include <linux/can/dev.h>
  27. #define KVASER_USB_MAX_RX_URBS 4
  28. #define KVASER_USB_MAX_TX_URBS 128
  29. #define KVASER_USB_TIMEOUT 1000 /* msecs */
  30. #define KVASER_USB_RX_BUFFER_SIZE 3072
  31. #define KVASER_USB_MAX_NET_DEVICES 5
  32. /* USB devices features */
  33. #define KVASER_USB_HAS_SILENT_MODE BIT(0)
  34. #define KVASER_USB_HAS_TXRX_ERRORS BIT(1)
  35. /* Device capabilities */
  36. #define KVASER_USB_CAP_BERR_CAP 0x01
  37. #define KVASER_USB_CAP_EXT_CAP 0x02
  38. #define KVASER_USB_HYDRA_CAP_EXT_CMD 0x04
  39. struct kvaser_usb_dev_cfg;
  40. enum kvaser_usb_leaf_family {
  41. KVASER_LEAF,
  42. KVASER_USBCAN,
  43. };
  44. #define KVASER_USB_HYDRA_MAX_CMD_LEN 128
  45. struct kvaser_usb_dev_card_data_hydra {
  46. u8 channel_to_he[KVASER_USB_MAX_NET_DEVICES];
  47. u8 sysdbg_he;
  48. spinlock_t transid_lock; /* lock for transid */
  49. u16 transid;
  50. /* lock for usb_rx_leftover and usb_rx_leftover_len */
  51. spinlock_t usb_rx_leftover_lock;
  52. u8 usb_rx_leftover[KVASER_USB_HYDRA_MAX_CMD_LEN];
  53. u8 usb_rx_leftover_len;
  54. };
  55. struct kvaser_usb_dev_card_data {
  56. u32 ctrlmode_supported;
  57. u32 capabilities;
  58. union {
  59. struct {
  60. enum kvaser_usb_leaf_family family;
  61. } leaf;
  62. struct kvaser_usb_dev_card_data_hydra hydra;
  63. };
  64. };
  65. /* Context for an outstanding, not yet ACKed, transmission */
  66. struct kvaser_usb_tx_urb_context {
  67. struct kvaser_usb_net_priv *priv;
  68. u32 echo_index;
  69. int dlc;
  70. };
  71. struct kvaser_usb {
  72. struct usb_device *udev;
  73. struct usb_interface *intf;
  74. struct kvaser_usb_net_priv *nets[KVASER_USB_MAX_NET_DEVICES];
  75. const struct kvaser_usb_dev_ops *ops;
  76. const struct kvaser_usb_dev_cfg *cfg;
  77. struct usb_endpoint_descriptor *bulk_in, *bulk_out;
  78. struct usb_anchor rx_submitted;
  79. /* @max_tx_urbs: Firmware-reported maximum number of outstanding,
  80. * not yet ACKed, transmissions on this device. This value is
  81. * also used as a sentinel for marking free tx contexts.
  82. */
  83. u32 fw_version;
  84. unsigned int nchannels;
  85. unsigned int max_tx_urbs;
  86. struct kvaser_usb_dev_card_data card_data;
  87. bool rxinitdone;
  88. void *rxbuf[KVASER_USB_MAX_RX_URBS];
  89. dma_addr_t rxbuf_dma[KVASER_USB_MAX_RX_URBS];
  90. };
  91. struct kvaser_usb_net_priv {
  92. struct can_priv can;
  93. struct can_berr_counter bec;
  94. struct kvaser_usb *dev;
  95. struct net_device *netdev;
  96. int channel;
  97. struct completion start_comp, stop_comp, flush_comp;
  98. struct usb_anchor tx_submitted;
  99. spinlock_t tx_contexts_lock; /* lock for active_tx_contexts */
  100. int active_tx_contexts;
  101. struct kvaser_usb_tx_urb_context tx_contexts[];
  102. };
  103. /**
  104. * struct kvaser_usb_dev_ops - Device specific functions
  105. * @dev_set_mode: used for can.do_set_mode
  106. * @dev_set_bittiming: used for can.do_set_bittiming
  107. * @dev_set_data_bittiming: used for can.do_set_data_bittiming
  108. * @dev_get_berr_counter: used for can.do_get_berr_counter
  109. *
  110. * @dev_setup_endpoints: setup USB in and out endpoints
  111. * @dev_init_card: initialize card
  112. * @dev_get_software_info: get software info
  113. * @dev_get_software_details: get software details
  114. * @dev_get_card_info: get card info
  115. * @dev_get_capabilities: discover device capabilities
  116. *
  117. * @dev_set_opt_mode: set ctrlmod
  118. * @dev_start_chip: start the CAN controller
  119. * @dev_stop_chip: stop the CAN controller
  120. * @dev_reset_chip: reset the CAN controller
  121. * @dev_flush_queue: flush outstanding CAN messages
  122. * @dev_read_bulk_callback: handle incoming commands
  123. * @dev_frame_to_cmd: translate struct can_frame into device command
  124. */
  125. struct kvaser_usb_dev_ops {
  126. int (*dev_set_mode)(struct net_device *netdev, enum can_mode mode);
  127. int (*dev_set_bittiming)(struct net_device *netdev);
  128. int (*dev_set_data_bittiming)(struct net_device *netdev);
  129. int (*dev_get_berr_counter)(const struct net_device *netdev,
  130. struct can_berr_counter *bec);
  131. int (*dev_setup_endpoints)(struct kvaser_usb *dev);
  132. int (*dev_init_card)(struct kvaser_usb *dev);
  133. int (*dev_get_software_info)(struct kvaser_usb *dev);
  134. int (*dev_get_software_details)(struct kvaser_usb *dev);
  135. int (*dev_get_card_info)(struct kvaser_usb *dev);
  136. int (*dev_get_capabilities)(struct kvaser_usb *dev);
  137. int (*dev_set_opt_mode)(const struct kvaser_usb_net_priv *priv);
  138. int (*dev_start_chip)(struct kvaser_usb_net_priv *priv);
  139. int (*dev_stop_chip)(struct kvaser_usb_net_priv *priv);
  140. int (*dev_reset_chip)(struct kvaser_usb *dev, int channel);
  141. int (*dev_flush_queue)(struct kvaser_usb_net_priv *priv);
  142. void (*dev_read_bulk_callback)(struct kvaser_usb *dev, void *buf,
  143. int len);
  144. void *(*dev_frame_to_cmd)(const struct kvaser_usb_net_priv *priv,
  145. const struct sk_buff *skb, int *frame_len,
  146. int *cmd_len, u16 transid);
  147. };
  148. struct kvaser_usb_dev_cfg {
  149. const struct can_clock clock;
  150. const unsigned int timestamp_freq;
  151. const struct can_bittiming_const * const bittiming_const;
  152. const struct can_bittiming_const * const data_bittiming_const;
  153. };
  154. extern const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops;
  155. extern const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops;
  156. int kvaser_usb_recv_cmd(const struct kvaser_usb *dev, void *cmd, int len,
  157. int *actual_len);
  158. int kvaser_usb_send_cmd(const struct kvaser_usb *dev, void *cmd, int len);
  159. int kvaser_usb_send_cmd_async(struct kvaser_usb_net_priv *priv, void *cmd,
  160. int len);
  161. int kvaser_usb_can_rx_over_error(struct net_device *netdev);
  162. #endif /* KVASER_USB_H */