hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/can/usb/kvaser_usb/kvaser_usb.h
....@@ -35,9 +35,10 @@
3535 #define KVASER_USB_RX_BUFFER_SIZE 3072
3636 #define KVASER_USB_MAX_NET_DEVICES 5
3737
38
-/* USB devices features */
39
-#define KVASER_USB_HAS_SILENT_MODE BIT(0)
40
-#define KVASER_USB_HAS_TXRX_ERRORS BIT(1)
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)
4142
4243 /* Device capabilities */
4344 #define KVASER_USB_CAP_BERR_CAP 0x01
....@@ -65,12 +66,7 @@
6566 struct kvaser_usb_dev_card_data {
6667 u32 ctrlmode_supported;
6768 u32 capabilities;
68
- union {
69
- struct {
70
- enum kvaser_usb_leaf_family family;
71
- } leaf;
72
- struct kvaser_usb_dev_card_data_hydra hydra;
73
- };
69
+ struct kvaser_usb_dev_card_data_hydra hydra;
7470 };
7571
7672 /* Context for an outstanding, not yet ACKed, transmission */
....@@ -80,11 +76,19 @@
8076 int dlc;
8177 };
8278
79
+struct kvaser_usb_busparams {
80
+ __le32 bitrate;
81
+ u8 tseg1;
82
+ u8 tseg2;
83
+ u8 sjw;
84
+ u8 nsamples;
85
+} __packed;
86
+
8387 struct kvaser_usb {
8488 struct usb_device *udev;
8589 struct usb_interface *intf;
8690 struct kvaser_usb_net_priv *nets[KVASER_USB_MAX_NET_DEVICES];
87
- const struct kvaser_usb_dev_ops *ops;
91
+ const struct kvaser_usb_driver_info *driver_info;
8892 const struct kvaser_usb_dev_cfg *cfg;
8993
9094 struct usb_endpoint_descriptor *bulk_in, *bulk_out;
....@@ -108,12 +112,18 @@
108112 struct can_priv can;
109113 struct can_berr_counter bec;
110114
115
+ /* subdriver-specific data */
116
+ void *sub_priv;
117
+
111118 struct kvaser_usb *dev;
112119 struct net_device *netdev;
113120 int channel;
114121
115
- struct completion start_comp, stop_comp, flush_comp;
122
+ struct completion start_comp, stop_comp, flush_comp,
123
+ get_busparams_comp;
116124 struct usb_anchor tx_submitted;
125
+
126
+ struct kvaser_usb_busparams busparams_nominal, busparams_data;
117127
118128 spinlock_t tx_contexts_lock; /* lock for active_tx_contexts */
119129 int active_tx_contexts;
....@@ -124,11 +134,15 @@
124134 * struct kvaser_usb_dev_ops - Device specific functions
125135 * @dev_set_mode: used for can.do_set_mode
126136 * @dev_set_bittiming: used for can.do_set_bittiming
137
+ * @dev_get_busparams: readback arbitration busparams
127138 * @dev_set_data_bittiming: used for can.do_set_data_bittiming
139
+ * @dev_get_data_busparams: readback data busparams
128140 * @dev_get_berr_counter: used for can.do_get_berr_counter
129141 *
130142 * @dev_setup_endpoints: setup USB in and out endpoints
131143 * @dev_init_card: initialize card
144
+ * @dev_init_channel: initialize channel
145
+ * @dev_remove_channel: uninitialize channel
132146 * @dev_get_software_info: get software info
133147 * @dev_get_software_details: get software details
134148 * @dev_get_card_info: get card info
....@@ -144,12 +158,18 @@
144158 */
145159 struct kvaser_usb_dev_ops {
146160 int (*dev_set_mode)(struct net_device *netdev, enum can_mode mode);
147
- int (*dev_set_bittiming)(struct net_device *netdev);
148
- int (*dev_set_data_bittiming)(struct net_device *netdev);
161
+ int (*dev_set_bittiming)(const struct net_device *netdev,
162
+ const struct kvaser_usb_busparams *busparams);
163
+ int (*dev_get_busparams)(struct kvaser_usb_net_priv *priv);
164
+ int (*dev_set_data_bittiming)(const struct net_device *netdev,
165
+ const struct kvaser_usb_busparams *busparams);
166
+ int (*dev_get_data_busparams)(struct kvaser_usb_net_priv *priv);
149167 int (*dev_get_berr_counter)(const struct net_device *netdev,
150168 struct can_berr_counter *bec);
151169 int (*dev_setup_endpoints)(struct kvaser_usb *dev);
152170 int (*dev_init_card)(struct kvaser_usb *dev);
171
+ int (*dev_init_channel)(struct kvaser_usb_net_priv *priv);
172
+ void (*dev_remove_channel)(struct kvaser_usb_net_priv *priv);
153173 int (*dev_get_software_info)(struct kvaser_usb *dev);
154174 int (*dev_get_software_details)(struct kvaser_usb *dev);
155175 int (*dev_get_card_info)(struct kvaser_usb *dev);
....@@ -166,6 +186,12 @@
166186 int *cmd_len, u16 transid);
167187 };
168188
189
+struct kvaser_usb_driver_info {
190
+ u32 quirks;
191
+ enum kvaser_usb_leaf_family family;
192
+ const struct kvaser_usb_dev_ops *ops;
193
+};
194
+
169195 struct kvaser_usb_dev_cfg {
170196 const struct can_clock clock;
171197 const unsigned int timestamp_freq;
....@@ -176,6 +202,8 @@
176202 extern const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops;
177203 extern const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops;
178204
205
+void kvaser_usb_unlink_tx_urbs(struct kvaser_usb_net_priv *priv);
206
+
179207 int kvaser_usb_recv_cmd(const struct kvaser_usb *dev, void *cmd, int len,
180208 int *actual_len);
181209
....@@ -185,4 +213,7 @@
185213 int len);
186214
187215 int kvaser_usb_can_rx_over_error(struct net_device *netdev);
216
+
217
+extern const struct can_bittiming_const kvaser_usb_flexc_bittiming_const;
218
+
188219 #endif /* KVASER_USB_H */