]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - drivers/net/can/usb/gs_usb.c
can: gs_usb: change active_channels's type from atomic_t to u8
[mirror_ubuntu-jammy-kernel.git] / drivers / net / can / usb / gs_usb.c
CommitLineData
8e8e69d6 1// SPDX-License-Identifier: GPL-2.0-only
f155d9c0
MS
2/* CAN driver for Geschwister Schneider USB/CAN devices
3 * and bytewerk.org candleLight USB CAN interfaces.
d08e973a 4 *
f155d9c0 5 * Copyright (C) 2013-2016 Geschwister Schneider Technologie-,
d08e973a 6 * Entwicklungs- und Vertriebs UG (Haftungsbeschränkt).
f155d9c0 7 * Copyright (C) 2016 Hubert Denkmair
d08e973a
MS
8 *
9 * Many thanks to all socketcan devs!
d08e973a
MS
10 */
11
cc69837f 12#include <linux/ethtool.h>
d08e973a
MS
13#include <linux/init.h>
14#include <linux/signal.h>
15#include <linux/module.h>
16#include <linux/netdevice.h>
17#include <linux/usb.h>
18
19#include <linux/can.h>
20#include <linux/can/dev.h>
21#include <linux/can/error.h>
22
23/* Device specific constants */
24#define USB_GSUSB_1_VENDOR_ID 0x1d50
25#define USB_GSUSB_1_PRODUCT_ID 0x606f
26
f155d9c0
MS
27#define USB_CANDLELIGHT_VENDOR_ID 0x1209
28#define USB_CANDLELIGHT_PRODUCT_ID 0x2323
29
d08e973a
MS
30#define GSUSB_ENDPOINT_IN 1
31#define GSUSB_ENDPOINT_OUT 2
32
33/* Device specific constants */
34enum gs_usb_breq {
35 GS_USB_BREQ_HOST_FORMAT = 0,
36 GS_USB_BREQ_BITTIMING,
37 GS_USB_BREQ_MODE,
38 GS_USB_BREQ_BERR,
39 GS_USB_BREQ_BT_CONST,
05ca5270
MS
40 GS_USB_BREQ_DEVICE_CONFIG,
41 GS_USB_BREQ_TIMESTAMP,
42 GS_USB_BREQ_IDENTIFY,
d08e973a
MS
43};
44
45enum gs_can_mode {
46 /* reset a channel. turns it off */
47 GS_CAN_MODE_RESET = 0,
48 /* starts a channel */
49 GS_CAN_MODE_START
50};
51
52enum gs_can_state {
53 GS_CAN_STATE_ERROR_ACTIVE = 0,
54 GS_CAN_STATE_ERROR_WARNING,
55 GS_CAN_STATE_ERROR_PASSIVE,
56 GS_CAN_STATE_BUS_OFF,
57 GS_CAN_STATE_STOPPED,
58 GS_CAN_STATE_SLEEPING
59};
60
05ca5270
MS
61enum gs_can_identify_mode {
62 GS_CAN_IDENTIFY_OFF = 0,
63 GS_CAN_IDENTIFY_ON
64};
65
d08e973a 66/* data types passed between host and device */
4ba1cb39
MKB
67
68/* The firmware on the original USB2CAN by Geschwister Schneider
69 * Technologie Entwicklungs- und Vertriebs UG exchanges all data
70 * between the host and the device in host byte order. This is done
71 * with the struct gs_host_config::byte_order member, which is sent
72 * first to indicate the desired byte order.
73 *
74 * The widely used open source firmware candleLight doesn't support
75 * this feature and exchanges the data in little endian byte order.
76 */
d08e973a 77struct gs_host_config {
4ba1cb39 78 __le32 byte_order;
d08e973a 79} __packed;
d08e973a
MS
80
81struct gs_device_config {
82 u8 reserved1;
83 u8 reserved2;
84 u8 reserved3;
85 u8 icount;
4ba1cb39
MKB
86 __le32 sw_version;
87 __le32 hw_version;
d08e973a
MS
88} __packed;
89
90#define GS_CAN_MODE_NORMAL 0
9be95c91
MS
91#define GS_CAN_MODE_LISTEN_ONLY BIT(0)
92#define GS_CAN_MODE_LOOP_BACK BIT(1)
93#define GS_CAN_MODE_TRIPLE_SAMPLE BIT(2)
94#define GS_CAN_MODE_ONE_SHOT BIT(3)
d08e973a
MS
95
96struct gs_device_mode {
4ba1cb39
MKB
97 __le32 mode;
98 __le32 flags;
d08e973a
MS
99} __packed;
100
101struct gs_device_state {
4ba1cb39
MKB
102 __le32 state;
103 __le32 rxerr;
104 __le32 txerr;
d08e973a
MS
105} __packed;
106
107struct gs_device_bittiming {
4ba1cb39
MKB
108 __le32 prop_seg;
109 __le32 phase_seg1;
110 __le32 phase_seg2;
111 __le32 sjw;
112 __le32 brp;
d08e973a
MS
113} __packed;
114
05ca5270 115struct gs_identify_mode {
4ba1cb39 116 __le32 mode;
05ca5270
MS
117} __packed;
118
9be95c91
MS
119#define GS_CAN_FEATURE_LISTEN_ONLY BIT(0)
120#define GS_CAN_FEATURE_LOOP_BACK BIT(1)
121#define GS_CAN_FEATURE_TRIPLE_SAMPLE BIT(2)
122#define GS_CAN_FEATURE_ONE_SHOT BIT(3)
05ca5270
MS
123#define GS_CAN_FEATURE_HW_TIMESTAMP BIT(4)
124#define GS_CAN_FEATURE_IDENTIFY BIT(5)
d08e973a
MS
125
126struct gs_device_bt_const {
4ba1cb39
MKB
127 __le32 feature;
128 __le32 fclk_can;
129 __le32 tseg1_min;
130 __le32 tseg1_max;
131 __le32 tseg2_min;
132 __le32 tseg2_max;
133 __le32 sjw_max;
134 __le32 brp_min;
135 __le32 brp_max;
136 __le32 brp_inc;
d08e973a
MS
137} __packed;
138
139#define GS_CAN_FLAG_OVERFLOW 1
140
141struct gs_host_frame {
142 u32 echo_id;
4ba1cb39 143 __le32 can_id;
d08e973a
MS
144
145 u8 can_dlc;
146 u8 channel;
147 u8 flags;
148 u8 reserved;
149
150 u8 data[8];
151} __packed;
152/* The GS USB devices make use of the same flags and masks as in
153 * linux/can.h and linux/can/error.h, and no additional mapping is necessary.
154 */
155
156/* Only send a max of GS_MAX_TX_URBS frames per channel at a time. */
157#define GS_MAX_TX_URBS 10
158/* Only launch a max of GS_MAX_RX_URBS usb requests at a time. */
159#define GS_MAX_RX_URBS 30
160/* Maximum number of interfaces the driver supports per device.
161 * Current hardware only supports 2 interfaces. The future may vary.
162 */
163#define GS_MAX_INTF 2
164
165struct gs_tx_context {
166 struct gs_can *dev;
167 unsigned int echo_id;
168};
169
170struct gs_can {
171 struct can_priv can; /* must be the first member */
172
173 struct gs_usb *parent;
174
175 struct net_device *netdev;
176 struct usb_device *udev;
177 struct usb_interface *iface;
178
179 struct can_bittiming_const bt_const;
180 unsigned int channel; /* channel number */
181
ae421e33 182 /* This lock prevents a race condition between xmit and receive. */
d08e973a
MS
183 spinlock_t tx_ctx_lock;
184 struct gs_tx_context tx_context[GS_MAX_TX_URBS];
185
186 struct usb_anchor tx_submitted;
187 atomic_t active_tx_urbs;
188};
189
190/* usb interface struct */
191struct gs_usb {
192 struct gs_can *canch[GS_MAX_INTF];
193 struct usb_anchor rx_submitted;
d08e973a 194 struct usb_device *udev;
30236f2e 195 u8 active_channels;
d08e973a
MS
196};
197
198/* 'allocate' a tx context.
199 * returns a valid tx context or NULL if there is no space.
200 */
201static struct gs_tx_context *gs_alloc_tx_context(struct gs_can *dev)
202{
203 int i = 0;
204 unsigned long flags;
205
206 spin_lock_irqsave(&dev->tx_ctx_lock, flags);
207
208 for (; i < GS_MAX_TX_URBS; i++) {
209 if (dev->tx_context[i].echo_id == GS_MAX_TX_URBS) {
210 dev->tx_context[i].echo_id = i;
211 spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
212 return &dev->tx_context[i];
213 }
214 }
215
216 spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
217 return NULL;
218}
219
220/* releases a tx context
221 */
222static void gs_free_tx_context(struct gs_tx_context *txc)
223{
224 txc->echo_id = GS_MAX_TX_URBS;
225}
226
227/* Get a tx context by id.
228 */
9be95c91
MS
229static struct gs_tx_context *gs_get_tx_context(struct gs_can *dev,
230 unsigned int id)
d08e973a
MS
231{
232 unsigned long flags;
233
234 if (id < GS_MAX_TX_URBS) {
235 spin_lock_irqsave(&dev->tx_ctx_lock, flags);
236 if (dev->tx_context[id].echo_id == id) {
237 spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
238 return &dev->tx_context[id];
239 }
240 spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
241 }
242 return NULL;
243}
244
dda8deb6 245static int gs_cmd_reset(struct gs_can *gsdev)
d08e973a
MS
246{
247 struct gs_device_mode *dm;
248 struct usb_interface *intf = gsdev->iface;
249 int rc;
250
251 dm = kzalloc(sizeof(*dm), GFP_KERNEL);
252 if (!dm)
253 return -ENOMEM;
254
255 dm->mode = GS_CAN_MODE_RESET;
256
257 rc = usb_control_msg(interface_to_usbdev(intf),
258 usb_sndctrlpipe(interface_to_usbdev(intf), 0),
259 GS_USB_BREQ_MODE,
540a27ae 260 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
d08e973a
MS
261 gsdev->channel,
262 0,
263 dm,
264 sizeof(*dm),
265 1000);
266
5cda3ee5
MKB
267 kfree(dm);
268
d08e973a
MS
269 return rc;
270}
271
272static void gs_update_state(struct gs_can *dev, struct can_frame *cf)
273{
274 struct can_device_stats *can_stats = &dev->can.can_stats;
275
276 if (cf->can_id & CAN_ERR_RESTARTED) {
277 dev->can.state = CAN_STATE_ERROR_ACTIVE;
278 can_stats->restarts++;
279 } else if (cf->can_id & CAN_ERR_BUSOFF) {
280 dev->can.state = CAN_STATE_BUS_OFF;
281 can_stats->bus_off++;
282 } else if (cf->can_id & CAN_ERR_CRTL) {
283 if ((cf->data[1] & CAN_ERR_CRTL_TX_WARNING) ||
284 (cf->data[1] & CAN_ERR_CRTL_RX_WARNING)) {
285 dev->can.state = CAN_STATE_ERROR_WARNING;
286 can_stats->error_warning++;
287 } else if ((cf->data[1] & CAN_ERR_CRTL_TX_PASSIVE) ||
288 (cf->data[1] & CAN_ERR_CRTL_RX_PASSIVE)) {
289 dev->can.state = CAN_STATE_ERROR_PASSIVE;
290 can_stats->error_passive++;
291 } else {
292 dev->can.state = CAN_STATE_ERROR_ACTIVE;
293 }
294 }
295}
296
ae421e33 297static void gs_usb_receive_bulk_callback(struct urb *urb)
d08e973a
MS
298{
299 struct gs_usb *usbcan = urb->context;
300 struct gs_can *dev;
301 struct net_device *netdev;
302 int rc;
303 struct net_device_stats *stats;
304 struct gs_host_frame *hf = urb->transfer_buffer;
305 struct gs_tx_context *txc;
306 struct can_frame *cf;
307 struct sk_buff *skb;
308
309 BUG_ON(!usbcan);
310
311 switch (urb->status) {
312 case 0: /* success */
313 break;
314 case -ENOENT:
315 case -ESHUTDOWN:
316 return;
317 default:
318 /* do not resubmit aborted urbs. eg: when device goes down */
319 return;
320 }
321
322 /* device reports out of range channel id */
323 if (hf->channel >= GS_MAX_INTF)
03329338 324 goto device_detach;
d08e973a
MS
325
326 dev = usbcan->canch[hf->channel];
327
328 netdev = dev->netdev;
329 stats = &netdev->stats;
330
331 if (!netif_device_present(netdev))
332 return;
333
334 if (hf->echo_id == -1) { /* normal rx */
335 skb = alloc_can_skb(dev->netdev, &cf);
336 if (!skb)
337 return;
338
4ba1cb39 339 cf->can_id = le32_to_cpu(hf->can_id);
d08e973a 340
4c01fc87 341 can_frame_set_cc_len(cf, hf->can_dlc, dev->can.ctrlmode);
d08e973a
MS
342 memcpy(cf->data, hf->data, 8);
343
344 /* ERROR frames tell us information about the controller */
4ba1cb39 345 if (le32_to_cpu(hf->can_id) & CAN_ERR_FLAG)
d08e973a
MS
346 gs_update_state(dev, cf);
347
348 netdev->stats.rx_packets++;
349 netdev->stats.rx_bytes += hf->can_dlc;
350
351 netif_rx(skb);
352 } else { /* echo_id == hf->echo_id */
353 if (hf->echo_id >= GS_MAX_TX_URBS) {
354 netdev_err(netdev,
355 "Unexpected out of range echo id %d\n",
356 hf->echo_id);
357 goto resubmit_urb;
358 }
359
360 netdev->stats.tx_packets++;
361 netdev->stats.tx_bytes += hf->can_dlc;
362
363 txc = gs_get_tx_context(dev, hf->echo_id);
364
365 /* bad devices send bad echo_ids. */
366 if (!txc) {
367 netdev_err(netdev,
368 "Unexpected unused echo id %d\n",
369 hf->echo_id);
370 goto resubmit_urb;
371 }
372
9420e1d4 373 can_get_echo_skb(netdev, hf->echo_id, NULL);
d08e973a
MS
374
375 gs_free_tx_context(txc);
376
97819f94
WG
377 atomic_dec(&dev->active_tx_urbs);
378
d08e973a
MS
379 netif_wake_queue(netdev);
380 }
381
382 if (hf->flags & GS_CAN_FLAG_OVERFLOW) {
383 skb = alloc_can_err_skb(netdev, &cf);
384 if (!skb)
385 goto resubmit_urb;
386
387 cf->can_id |= CAN_ERR_CRTL;
c7b74967 388 cf->len = CAN_ERR_DLC;
d08e973a
MS
389 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
390 stats->rx_over_errors++;
391 stats->rx_errors++;
392 netif_rx(skb);
393 }
394
395 resubmit_urb:
396 usb_fill_bulk_urb(urb,
397 usbcan->udev,
398 usb_rcvbulkpipe(usbcan->udev, GSUSB_ENDPOINT_IN),
399 hf,
400 sizeof(struct gs_host_frame),
ae421e33 401 gs_usb_receive_bulk_callback,
d08e973a
MS
402 usbcan
403 );
404
405 rc = usb_submit_urb(urb, GFP_ATOMIC);
406
407 /* USB failure take down all interfaces */
408 if (rc == -ENODEV) {
03329338 409 device_detach:
d08e973a
MS
410 for (rc = 0; rc < GS_MAX_INTF; rc++) {
411 if (usbcan->canch[rc])
412 netif_device_detach(usbcan->canch[rc]->netdev);
413 }
414 }
415}
416
417static int gs_usb_set_bittiming(struct net_device *netdev)
418{
419 struct gs_can *dev = netdev_priv(netdev);
420 struct can_bittiming *bt = &dev->can.bittiming;
421 struct usb_interface *intf = dev->iface;
422 int rc;
423 struct gs_device_bittiming *dbt;
424
425 dbt = kmalloc(sizeof(*dbt), GFP_KERNEL);
426 if (!dbt)
427 return -ENOMEM;
428
4ba1cb39
MKB
429 dbt->prop_seg = cpu_to_le32(bt->prop_seg);
430 dbt->phase_seg1 = cpu_to_le32(bt->phase_seg1);
431 dbt->phase_seg2 = cpu_to_le32(bt->phase_seg2);
432 dbt->sjw = cpu_to_le32(bt->sjw);
433 dbt->brp = cpu_to_le32(bt->brp);
d08e973a
MS
434
435 /* request bit timings */
436 rc = usb_control_msg(interface_to_usbdev(intf),
437 usb_sndctrlpipe(interface_to_usbdev(intf), 0),
438 GS_USB_BREQ_BITTIMING,
540a27ae 439 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
d08e973a
MS
440 dev->channel,
441 0,
442 dbt,
443 sizeof(*dbt),
444 1000);
445
446 kfree(dbt);
447
448 if (rc < 0)
449 dev_err(netdev->dev.parent, "Couldn't set bittimings (err=%d)",
450 rc);
451
d5b42e66 452 return (rc > 0) ? 0 : rc;
d08e973a
MS
453}
454
455static void gs_usb_xmit_callback(struct urb *urb)
456{
457 struct gs_tx_context *txc = urb->context;
458 struct gs_can *dev = txc->dev;
459 struct net_device *netdev = dev->netdev;
460
461 if (urb->status)
462 netdev_info(netdev, "usb xmit fail %d\n", txc->echo_id);
463
464 usb_free_coherent(urb->dev,
465 urb->transfer_buffer_length,
466 urb->transfer_buffer,
467 urb->transfer_dma);
d08e973a
MS
468}
469
9be95c91
MS
470static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,
471 struct net_device *netdev)
d08e973a
MS
472{
473 struct gs_can *dev = netdev_priv(netdev);
474 struct net_device_stats *stats = &dev->netdev->stats;
475 struct urb *urb;
476 struct gs_host_frame *hf;
477 struct can_frame *cf;
478 int rc;
479 unsigned int idx;
480 struct gs_tx_context *txc;
481
482 if (can_dropped_invalid_skb(netdev, skb))
483 return NETDEV_TX_OK;
484
485 /* find an empty context to keep track of transmission */
486 txc = gs_alloc_tx_context(dev);
487 if (!txc)
488 return NETDEV_TX_BUSY;
489
490 /* create a URB, and a buffer for it */
491 urb = usb_alloc_urb(0, GFP_ATOMIC);
2a4a1e40 492 if (!urb)
d08e973a 493 goto nomem_urb;
d08e973a
MS
494
495 hf = usb_alloc_coherent(dev->udev, sizeof(*hf), GFP_ATOMIC,
496 &urb->transfer_dma);
497 if (!hf) {
498 netdev_err(netdev, "No memory left for USB buffer\n");
499 goto nomem_hf;
500 }
501
502 idx = txc->echo_id;
503
504 if (idx >= GS_MAX_TX_URBS) {
505 netdev_err(netdev, "Invalid tx context %d\n", idx);
506 goto badidx;
507 }
508
509 hf->echo_id = idx;
510 hf->channel = dev->channel;
143cbb8d
BS
511 hf->flags = 0;
512 hf->reserved = 0;
d08e973a
MS
513
514 cf = (struct can_frame *)skb->data;
515
4ba1cb39 516 hf->can_id = cpu_to_le32(cf->can_id);
4c01fc87
OH
517 hf->can_dlc = can_get_cc_dlc(cf, dev->can.ctrlmode);
518
c7b74967 519 memcpy(hf->data, cf->data, cf->len);
d08e973a
MS
520
521 usb_fill_bulk_urb(urb, dev->udev,
522 usb_sndbulkpipe(dev->udev, GSUSB_ENDPOINT_OUT),
523 hf,
524 sizeof(*hf),
525 gs_usb_xmit_callback,
526 txc);
527
528 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
529 usb_anchor_urb(urb, &dev->tx_submitted);
530
1dcb6e57 531 can_put_echo_skb(skb, netdev, idx, 0);
d08e973a
MS
532
533 atomic_inc(&dev->active_tx_urbs);
534
535 rc = usb_submit_urb(urb, GFP_ATOMIC);
536 if (unlikely(rc)) { /* usb send failed */
537 atomic_dec(&dev->active_tx_urbs);
538
f318482a 539 can_free_echo_skb(netdev, idx, NULL);
d08e973a
MS
540 gs_free_tx_context(txc);
541
542 usb_unanchor_urb(urb);
543 usb_free_coherent(dev->udev,
544 sizeof(*hf),
545 hf,
546 urb->transfer_dma);
547
d08e973a
MS
548 if (rc == -ENODEV) {
549 netif_device_detach(netdev);
550 } else {
551 netdev_err(netdev, "usb_submit failed (err=%d)\n", rc);
552 stats->tx_dropped++;
553 }
554 } else {
555 /* Slow down tx path */
556 if (atomic_read(&dev->active_tx_urbs) >= GS_MAX_TX_URBS)
557 netif_stop_queue(netdev);
558 }
559
560 /* let usb core take care of this urb */
561 usb_free_urb(urb);
562
563 return NETDEV_TX_OK;
564
565 badidx:
566 usb_free_coherent(dev->udev,
567 sizeof(*hf),
568 hf,
569 urb->transfer_dma);
570 nomem_hf:
571 usb_free_urb(urb);
572
573 nomem_urb:
574 gs_free_tx_context(txc);
575 dev_kfree_skb(skb);
576 stats->tx_dropped++;
577 return NETDEV_TX_OK;
578}
579
580static int gs_can_open(struct net_device *netdev)
581{
582 struct gs_can *dev = netdev_priv(netdev);
583 struct gs_usb *parent = dev->parent;
584 int rc, i;
585 struct gs_device_mode *dm;
586 u32 ctrlmode;
4ba1cb39 587 u32 flags = 0;
d08e973a
MS
588
589 rc = open_candev(netdev);
590 if (rc)
591 return rc;
592
30236f2e 593 if (!parent->active_channels) {
d08e973a
MS
594 for (i = 0; i < GS_MAX_RX_URBS; i++) {
595 struct urb *urb;
596 u8 *buf;
597
598 /* alloc rx urb */
599 urb = usb_alloc_urb(0, GFP_KERNEL);
2a4a1e40 600 if (!urb)
d08e973a 601 return -ENOMEM;
d08e973a
MS
602
603 /* alloc rx buffer */
604 buf = usb_alloc_coherent(dev->udev,
605 sizeof(struct gs_host_frame),
606 GFP_KERNEL,
607 &urb->transfer_dma);
608 if (!buf) {
609 netdev_err(netdev,
610 "No memory left for USB buffer\n");
611 usb_free_urb(urb);
612 return -ENOMEM;
613 }
614
615 /* fill, anchor, and submit rx urb */
616 usb_fill_bulk_urb(urb,
617 dev->udev,
618 usb_rcvbulkpipe(dev->udev,
619 GSUSB_ENDPOINT_IN),
620 buf,
621 sizeof(struct gs_host_frame),
ae421e33 622 gs_usb_receive_bulk_callback,
d08e973a
MS
623 parent);
624 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
625
626 usb_anchor_urb(urb, &parent->rx_submitted);
627
628 rc = usb_submit_urb(urb, GFP_KERNEL);
629 if (rc) {
630 if (rc == -ENODEV)
631 netif_device_detach(dev->netdev);
632
633 netdev_err(netdev,
634 "usb_submit failed (err=%d)\n",
635 rc);
636
637 usb_unanchor_urb(urb);
fb5be6a7 638 usb_free_urb(urb);
d08e973a
MS
639 break;
640 }
641
642 /* Drop reference,
643 * USB core will take care of freeing it
644 */
645 usb_free_urb(urb);
646 }
647 }
648
649 dm = kmalloc(sizeof(*dm), GFP_KERNEL);
650 if (!dm)
651 return -ENOMEM;
652
653 /* flags */
654 ctrlmode = dev->can.ctrlmode;
d08e973a
MS
655
656 if (ctrlmode & CAN_CTRLMODE_LOOPBACK)
4ba1cb39 657 flags |= GS_CAN_MODE_LOOP_BACK;
d08e973a 658 else if (ctrlmode & CAN_CTRLMODE_LISTENONLY)
4ba1cb39 659 flags |= GS_CAN_MODE_LISTEN_ONLY;
d08e973a
MS
660
661 /* Controller is not allowed to retry TX
662 * this mode is unavailable on atmels uc3c hardware
663 */
664 if (ctrlmode & CAN_CTRLMODE_ONE_SHOT)
4ba1cb39 665 flags |= GS_CAN_MODE_ONE_SHOT;
d08e973a
MS
666
667 if (ctrlmode & CAN_CTRLMODE_3_SAMPLES)
4ba1cb39 668 flags |= GS_CAN_MODE_TRIPLE_SAMPLE;
d08e973a
MS
669
670 /* finally start device */
4ba1cb39
MKB
671 dm->mode = cpu_to_le32(GS_CAN_MODE_START);
672 dm->flags = cpu_to_le32(flags);
d08e973a
MS
673 rc = usb_control_msg(interface_to_usbdev(dev->iface),
674 usb_sndctrlpipe(interface_to_usbdev(dev->iface), 0),
675 GS_USB_BREQ_MODE,
9be95c91
MS
676 USB_DIR_OUT | USB_TYPE_VENDOR |
677 USB_RECIP_INTERFACE,
d08e973a
MS
678 dev->channel,
679 0,
680 dm,
681 sizeof(*dm),
682 1000);
683
684 if (rc < 0) {
685 netdev_err(netdev, "Couldn't start device (err=%d)\n", rc);
686 kfree(dm);
687 return rc;
688 }
689
690 kfree(dm);
691
692 dev->can.state = CAN_STATE_ERROR_ACTIVE;
693
30236f2e 694 parent->active_channels++;
d08e973a
MS
695 if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
696 netif_start_queue(netdev);
697
698 return 0;
699}
700
701static int gs_can_close(struct net_device *netdev)
702{
703 int rc;
704 struct gs_can *dev = netdev_priv(netdev);
705 struct gs_usb *parent = dev->parent;
706
707 netif_stop_queue(netdev);
708
709 /* Stop polling */
30236f2e
VM
710 parent->active_channels--;
711 if (!parent->active_channels)
d08e973a
MS
712 usb_kill_anchored_urbs(&parent->rx_submitted);
713
714 /* Stop sending URBs */
715 usb_kill_anchored_urbs(&dev->tx_submitted);
716 atomic_set(&dev->active_tx_urbs, 0);
717
718 /* reset the device */
dda8deb6 719 rc = gs_cmd_reset(dev);
d08e973a
MS
720 if (rc < 0)
721 netdev_warn(netdev, "Couldn't shutdown device (err=%d)", rc);
722
723 /* reset tx contexts */
724 for (rc = 0; rc < GS_MAX_TX_URBS; rc++) {
725 dev->tx_context[rc].dev = dev;
726 dev->tx_context[rc].echo_id = GS_MAX_TX_URBS;
727 }
728
729 /* close the netdev */
730 close_candev(netdev);
731
732 return 0;
733}
734
735static const struct net_device_ops gs_usb_netdev_ops = {
736 .ndo_open = gs_can_open,
737 .ndo_stop = gs_can_close,
738 .ndo_start_xmit = gs_can_start_xmit,
50212b42 739 .ndo_change_mtu = can_change_mtu,
d08e973a
MS
740};
741
05ca5270
MS
742static int gs_usb_set_identify(struct net_device *netdev, bool do_identify)
743{
744 struct gs_can *dev = netdev_priv(netdev);
b05c73bd 745 struct gs_identify_mode *imode;
05ca5270
MS
746 int rc;
747
b05c73bd
MS
748 imode = kmalloc(sizeof(*imode), GFP_KERNEL);
749
750 if (!imode)
751 return -ENOMEM;
752
05ca5270 753 if (do_identify)
4ba1cb39 754 imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_ON);
05ca5270 755 else
4ba1cb39 756 imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_OFF);
05ca5270
MS
757
758 rc = usb_control_msg(interface_to_usbdev(dev->iface),
759 usb_sndctrlpipe(interface_to_usbdev(dev->iface),
760 0),
761 GS_USB_BREQ_IDENTIFY,
762 USB_DIR_OUT | USB_TYPE_VENDOR |
763 USB_RECIP_INTERFACE,
764 dev->channel,
765 0,
b05c73bd
MS
766 imode,
767 sizeof(*imode),
05ca5270
MS
768 100);
769
b05c73bd
MS
770 kfree(imode);
771
05ca5270
MS
772 return (rc > 0) ? 0 : rc;
773}
774
775/* blink LED's for finding the this interface */
776static int gs_usb_set_phys_id(struct net_device *dev,
777 enum ethtool_phys_id_state state)
778{
779 int rc = 0;
780
781 switch (state) {
782 case ETHTOOL_ID_ACTIVE:
783 rc = gs_usb_set_identify(dev, GS_CAN_IDENTIFY_ON);
784 break;
785 case ETHTOOL_ID_INACTIVE:
786 rc = gs_usb_set_identify(dev, GS_CAN_IDENTIFY_OFF);
787 break;
788 default:
789 break;
790 }
791
792 return rc;
793}
794
795static const struct ethtool_ops gs_usb_ethtool_ops = {
796 .set_phys_id = gs_usb_set_phys_id,
797};
798
799static struct gs_can *gs_make_candev(unsigned int channel,
800 struct usb_interface *intf,
801 struct gs_device_config *dconf)
d08e973a
MS
802{
803 struct gs_can *dev;
804 struct net_device *netdev;
805 int rc;
806 struct gs_device_bt_const *bt_const;
4ba1cb39 807 u32 feature;
d08e973a
MS
808
809 bt_const = kmalloc(sizeof(*bt_const), GFP_KERNEL);
810 if (!bt_const)
811 return ERR_PTR(-ENOMEM);
812
813 /* fetch bit timing constants */
814 rc = usb_control_msg(interface_to_usbdev(intf),
815 usb_rcvctrlpipe(interface_to_usbdev(intf), 0),
816 GS_USB_BREQ_BT_CONST,
540a27ae 817 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
d08e973a
MS
818 channel,
819 0,
820 bt_const,
821 sizeof(*bt_const),
822 1000);
823
824 if (rc < 0) {
825 dev_err(&intf->dev,
826 "Couldn't get bit timing const for channel (err=%d)\n",
827 rc);
828 kfree(bt_const);
829 return ERR_PTR(rc);
830 }
831
832 /* create netdev */
833 netdev = alloc_candev(sizeof(struct gs_can), GS_MAX_TX_URBS);
834 if (!netdev) {
835 dev_err(&intf->dev, "Couldn't allocate candev\n");
836 kfree(bt_const);
837 return ERR_PTR(-ENOMEM);
838 }
839
840 dev = netdev_priv(netdev);
841
842 netdev->netdev_ops = &gs_usb_netdev_ops;
843
844 netdev->flags |= IFF_ECHO; /* we support full roundtrip echo */
845
88bfb9a7 846 /* dev setup */
d08e973a 847 strcpy(dev->bt_const.name, "gs_usb");
4ba1cb39
MKB
848 dev->bt_const.tseg1_min = le32_to_cpu(bt_const->tseg1_min);
849 dev->bt_const.tseg1_max = le32_to_cpu(bt_const->tseg1_max);
850 dev->bt_const.tseg2_min = le32_to_cpu(bt_const->tseg2_min);
851 dev->bt_const.tseg2_max = le32_to_cpu(bt_const->tseg2_max);
852 dev->bt_const.sjw_max = le32_to_cpu(bt_const->sjw_max);
853 dev->bt_const.brp_min = le32_to_cpu(bt_const->brp_min);
854 dev->bt_const.brp_max = le32_to_cpu(bt_const->brp_max);
855 dev->bt_const.brp_inc = le32_to_cpu(bt_const->brp_inc);
d08e973a
MS
856
857 dev->udev = interface_to_usbdev(intf);
858 dev->iface = intf;
859 dev->netdev = netdev;
860 dev->channel = channel;
861
862 init_usb_anchor(&dev->tx_submitted);
863 atomic_set(&dev->active_tx_urbs, 0);
864 spin_lock_init(&dev->tx_ctx_lock);
865 for (rc = 0; rc < GS_MAX_TX_URBS; rc++) {
866 dev->tx_context[rc].dev = dev;
867 dev->tx_context[rc].echo_id = GS_MAX_TX_URBS;
868 }
869
88bfb9a7 870 /* can setup */
d08e973a 871 dev->can.state = CAN_STATE_STOPPED;
4ba1cb39 872 dev->can.clock.freq = le32_to_cpu(bt_const->fclk_can);
d08e973a
MS
873 dev->can.bittiming_const = &dev->bt_const;
874 dev->can.do_set_bittiming = gs_usb_set_bittiming;
875
4c01fc87 876 dev->can.ctrlmode_supported = CAN_CTRLMODE_CC_LEN8_DLC;
d08e973a 877
4ba1cb39
MKB
878 feature = le32_to_cpu(bt_const->feature);
879 if (feature & GS_CAN_FEATURE_LISTEN_ONLY)
d08e973a
MS
880 dev->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY;
881
4ba1cb39 882 if (feature & GS_CAN_FEATURE_LOOP_BACK)
d08e973a
MS
883 dev->can.ctrlmode_supported |= CAN_CTRLMODE_LOOPBACK;
884
4ba1cb39 885 if (feature & GS_CAN_FEATURE_TRIPLE_SAMPLE)
d08e973a
MS
886 dev->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
887
4ba1cb39 888 if (feature & GS_CAN_FEATURE_ONE_SHOT)
d08e973a
MS
889 dev->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT;
890
d08e973a
MS
891 SET_NETDEV_DEV(netdev, &intf->dev);
892
4ba1cb39
MKB
893 if (le32_to_cpu(dconf->sw_version) > 1)
894 if (feature & GS_CAN_FEATURE_IDENTIFY)
05ca5270
MS
895 netdev->ethtool_ops = &gs_usb_ethtool_ops;
896
897 kfree(bt_const);
898
d08e973a
MS
899 rc = register_candev(dev->netdev);
900 if (rc) {
901 free_candev(dev->netdev);
902 dev_err(&intf->dev, "Couldn't register candev (err=%d)\n", rc);
903 return ERR_PTR(rc);
904 }
905
906 return dev;
907}
908
909static void gs_destroy_candev(struct gs_can *dev)
910{
911 unregister_candev(dev->netdev);
d08e973a 912 usb_kill_anchored_urbs(&dev->tx_submitted);
e9a2d81b 913 free_candev(dev->netdev);
d08e973a
MS
914}
915
05ca5270
MS
916static int gs_usb_probe(struct usb_interface *intf,
917 const struct usb_device_id *id)
d08e973a
MS
918{
919 struct gs_usb *dev;
920 int rc = -ENOMEM;
921 unsigned int icount, i;
c919a306
EZ
922 struct gs_host_config *hconf;
923 struct gs_device_config *dconf;
924
925 hconf = kmalloc(sizeof(*hconf), GFP_KERNEL);
926 if (!hconf)
927 return -ENOMEM;
928
4ba1cb39 929 hconf->byte_order = cpu_to_le32(0x0000beef);
d08e973a
MS
930
931 /* send host config */
932 rc = usb_control_msg(interface_to_usbdev(intf),
933 usb_sndctrlpipe(interface_to_usbdev(intf), 0),
934 GS_USB_BREQ_HOST_FORMAT,
540a27ae 935 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
d08e973a 936 1,
2f361cd9 937 intf->cur_altsetting->desc.bInterfaceNumber,
c919a306
EZ
938 hconf,
939 sizeof(*hconf),
d08e973a
MS
940 1000);
941
c919a306
EZ
942 kfree(hconf);
943
d08e973a
MS
944 if (rc < 0) {
945 dev_err(&intf->dev, "Couldn't send data format (err=%d)\n",
946 rc);
947 return rc;
948 }
949
c919a306
EZ
950 dconf = kmalloc(sizeof(*dconf), GFP_KERNEL);
951 if (!dconf)
952 return -ENOMEM;
953
d08e973a
MS
954 /* read device config */
955 rc = usb_control_msg(interface_to_usbdev(intf),
956 usb_rcvctrlpipe(interface_to_usbdev(intf), 0),
957 GS_USB_BREQ_DEVICE_CONFIG,
540a27ae 958 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
d08e973a 959 1,
2f361cd9 960 intf->cur_altsetting->desc.bInterfaceNumber,
c919a306
EZ
961 dconf,
962 sizeof(*dconf),
d08e973a
MS
963 1000);
964 if (rc < 0) {
965 dev_err(&intf->dev, "Couldn't get device config: (err=%d)\n",
966 rc);
c919a306 967 kfree(dconf);
d08e973a
MS
968 return rc;
969 }
970
c919a306 971 icount = dconf->icount + 1;
d08e973a
MS
972 dev_info(&intf->dev, "Configuring for %d interfaces\n", icount);
973
974 if (icount > GS_MAX_INTF) {
975 dev_err(&intf->dev,
976 "Driver cannot handle more that %d CAN interfaces\n",
977 GS_MAX_INTF);
c919a306 978 kfree(dconf);
d08e973a
MS
979 return -EINVAL;
980 }
981
982 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
c919a306
EZ
983 if (!dev) {
984 kfree(dconf);
37920a74 985 return -ENOMEM;
c919a306
EZ
986 }
987
d08e973a
MS
988 init_usb_anchor(&dev->rx_submitted);
989
d08e973a
MS
990 usb_set_intfdata(intf, dev);
991 dev->udev = interface_to_usbdev(intf);
992
993 for (i = 0; i < icount; i++) {
c919a306 994 dev->canch[i] = gs_make_candev(i, intf, dconf);
d08e973a 995 if (IS_ERR_OR_NULL(dev->canch[i])) {
e9a2d81b
MS
996 /* save error code to return later */
997 rc = PTR_ERR(dev->canch[i]);
998
d08e973a
MS
999 /* on failure destroy previously created candevs */
1000 icount = i;
e9a2d81b 1001 for (i = 0; i < icount; i++)
d08e973a 1002 gs_destroy_candev(dev->canch[i]);
e9a2d81b
MS
1003
1004 usb_kill_anchored_urbs(&dev->rx_submitted);
c919a306 1005 kfree(dconf);
d08e973a
MS
1006 kfree(dev);
1007 return rc;
1008 }
1009 dev->canch[i]->parent = dev;
1010 }
1011
c919a306
EZ
1012 kfree(dconf);
1013
d08e973a
MS
1014 return 0;
1015}
1016
1017static void gs_usb_disconnect(struct usb_interface *intf)
1018{
1019 unsigned i;
1020 struct gs_usb *dev = usb_get_intfdata(intf);
1021 usb_set_intfdata(intf, NULL);
1022
1023 if (!dev) {
1024 dev_err(&intf->dev, "Disconnect (nodata)\n");
1025 return;
1026 }
1027
e9a2d81b
MS
1028 for (i = 0; i < GS_MAX_INTF; i++)
1029 if (dev->canch[i])
1030 gs_destroy_candev(dev->canch[i]);
d08e973a
MS
1031
1032 usb_kill_anchored_urbs(&dev->rx_submitted);
e9a2d81b 1033 kfree(dev);
d08e973a
MS
1034}
1035
1036static const struct usb_device_id gs_usb_table[] = {
2fe6c943
MS
1037 { USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID,
1038 USB_GSUSB_1_PRODUCT_ID, 0) },
f155d9c0
MS
1039 { USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID,
1040 USB_CANDLELIGHT_PRODUCT_ID, 0) },
d08e973a
MS
1041 {} /* Terminating entry */
1042};
1043
1044MODULE_DEVICE_TABLE(usb, gs_usb_table);
1045
1046static struct usb_driver gs_usb_driver = {
1047 .name = "gs_usb",
1048 .probe = gs_usb_probe,
1049 .disconnect = gs_usb_disconnect,
1050 .id_table = gs_usb_table,
1051};
1052
1053module_usb_driver(gs_usb_driver);
1054
1055MODULE_AUTHOR("Maximilian Schneider <mws@schneidersoft.net>");
1056MODULE_DESCRIPTION(
1057"Socket CAN device driver for Geschwister Schneider Technologie-, "
f155d9c0
MS
1058"Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces\n"
1059"and bytewerk.org candleLight USB CAN interfaces.");
d08e973a 1060MODULE_LICENSE("GPL v2");