Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[pandora-kernel.git] / drivers / net / can / usb / ems_usb.c
1 /*
2  * CAN driver for EMS Dr. Thomas Wuensche CPC-USB/ARM7
3  *
4  * Copyright (C) 2004-2009 EMS Dr. Thomas Wuensche
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published
8  * by the Free Software Foundation; version 2 of the License.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 #include <linux/init.h>
20 #include <linux/signal.h>
21 #include <linux/slab.h>
22 #include <linux/module.h>
23 #include <linux/netdevice.h>
24 #include <linux/usb.h>
25
26 #include <linux/can.h>
27 #include <linux/can/dev.h>
28 #include <linux/can/error.h>
29
30 MODULE_AUTHOR("Sebastian Haas <haas@ems-wuensche.com>");
31 MODULE_DESCRIPTION("CAN driver for EMS Dr. Thomas Wuensche CAN/USB interfaces");
32 MODULE_LICENSE("GPL v2");
33
34 /* Control-Values for CPC_Control() Command Subject Selection */
35 #define CONTR_CAN_MESSAGE 0x04
36 #define CONTR_CAN_STATE   0x0C
37 #define CONTR_BUS_ERROR   0x1C
38
39 /* Control Command Actions */
40 #define CONTR_CONT_OFF 0
41 #define CONTR_CONT_ON  1
42 #define CONTR_ONCE     2
43
44 /* Messages from CPC to PC */
45 #define CPC_MSG_TYPE_CAN_FRAME       1  /* CAN data frame */
46 #define CPC_MSG_TYPE_RTR_FRAME       8  /* CAN remote frame */
47 #define CPC_MSG_TYPE_CAN_PARAMS      12 /* Actual CAN parameters */
48 #define CPC_MSG_TYPE_CAN_STATE       14 /* CAN state message */
49 #define CPC_MSG_TYPE_EXT_CAN_FRAME   16 /* Extended CAN data frame */
50 #define CPC_MSG_TYPE_EXT_RTR_FRAME   17 /* Extended remote frame */
51 #define CPC_MSG_TYPE_CONTROL         19 /* change interface behavior */
52 #define CPC_MSG_TYPE_CONFIRM         20 /* command processed confirmation */
53 #define CPC_MSG_TYPE_OVERRUN         21 /* overrun events */
54 #define CPC_MSG_TYPE_CAN_FRAME_ERROR 23 /* detected bus errors */
55 #define CPC_MSG_TYPE_ERR_COUNTER     25 /* RX/TX error counter */
56
57 /* Messages from the PC to the CPC interface  */
58 #define CPC_CMD_TYPE_CAN_FRAME     1   /* CAN data frame */
59 #define CPC_CMD_TYPE_CONTROL       3   /* control of interface behavior */
60 #define CPC_CMD_TYPE_CAN_PARAMS    6   /* set CAN parameters */
61 #define CPC_CMD_TYPE_RTR_FRAME     13  /* CAN remote frame */
62 #define CPC_CMD_TYPE_CAN_STATE     14  /* CAN state message */
63 #define CPC_CMD_TYPE_EXT_CAN_FRAME 15  /* Extended CAN data frame */
64 #define CPC_CMD_TYPE_EXT_RTR_FRAME 16  /* Extended CAN remote frame */
65 #define CPC_CMD_TYPE_CAN_EXIT      200 /* exit the CAN */
66
67 #define CPC_CMD_TYPE_INQ_ERR_COUNTER 25 /* request the CAN error counters */
68 #define CPC_CMD_TYPE_CLEAR_MSG_QUEUE 8  /* clear CPC_MSG queue */
69 #define CPC_CMD_TYPE_CLEAR_CMD_QUEUE 28 /* clear CPC_CMD queue */
70
71 #define CPC_CC_TYPE_SJA1000 2 /* Philips basic CAN controller */
72
73 #define CPC_CAN_ECODE_ERRFRAME 0x01 /* Ecode type */
74
75 /* Overrun types */
76 #define CPC_OVR_EVENT_CAN       0x01
77 #define CPC_OVR_EVENT_CANSTATE  0x02
78 #define CPC_OVR_EVENT_BUSERROR  0x04
79
80 /*
81  * If the CAN controller lost a message we indicate it with the highest bit
82  * set in the count field.
83  */
84 #define CPC_OVR_HW 0x80
85
86 /* Size of the "struct ems_cpc_msg" without the union */
87 #define CPC_MSG_HEADER_LEN   11
88 #define CPC_CAN_MSG_MIN_SIZE 5
89
90 /* Define these values to match your devices */
91 #define USB_CPCUSB_VENDOR_ID 0x12D6
92
93 #define USB_CPCUSB_ARM7_PRODUCT_ID 0x0444
94
95 /* Mode register NXP LPC2119/SJA1000 CAN Controller */
96 #define SJA1000_MOD_NORMAL 0x00
97 #define SJA1000_MOD_RM     0x01
98
99 /* ECC register NXP LPC2119/SJA1000 CAN Controller */
100 #define SJA1000_ECC_SEG   0x1F
101 #define SJA1000_ECC_DIR   0x20
102 #define SJA1000_ECC_ERR   0x06
103 #define SJA1000_ECC_BIT   0x00
104 #define SJA1000_ECC_FORM  0x40
105 #define SJA1000_ECC_STUFF 0x80
106 #define SJA1000_ECC_MASK  0xc0
107
108 /* Status register content */
109 #define SJA1000_SR_BS 0x80
110 #define SJA1000_SR_ES 0x40
111
112 #define SJA1000_DEFAULT_OUTPUT_CONTROL 0xDA
113
114 /*
115  * The device actually uses a 16MHz clock to generate the CAN clock
116  * but it expects SJA1000 bit settings based on 8MHz (is internally
117  * converted).
118  */
119 #define EMS_USB_ARM7_CLOCK 8000000
120
121 /*
122  * CAN-Message representation in a CPC_MSG. Message object type is
123  * CPC_MSG_TYPE_CAN_FRAME or CPC_MSG_TYPE_RTR_FRAME or
124  * CPC_MSG_TYPE_EXT_CAN_FRAME or CPC_MSG_TYPE_EXT_RTR_FRAME.
125  */
126 struct cpc_can_msg {
127         u32 id;
128         u8 length;
129         u8 msg[8];
130 };
131
132 /* Representation of the CAN parameters for the SJA1000 controller */
133 struct cpc_sja1000_params {
134         u8 mode;
135         u8 acc_code0;
136         u8 acc_code1;
137         u8 acc_code2;
138         u8 acc_code3;
139         u8 acc_mask0;
140         u8 acc_mask1;
141         u8 acc_mask2;
142         u8 acc_mask3;
143         u8 btr0;
144         u8 btr1;
145         u8 outp_contr;
146 };
147
148 /* CAN params message representation */
149 struct cpc_can_params {
150         u8 cc_type;
151
152         /* Will support M16C CAN controller in the future */
153         union {
154                 struct cpc_sja1000_params sja1000;
155         } cc_params;
156 };
157
158 /* Structure for confirmed message handling */
159 struct cpc_confirm {
160         u8 error; /* error code */
161 };
162
163 /* Structure for overrun conditions */
164 struct cpc_overrun {
165         u8 event;
166         u8 count;
167 };
168
169 /* SJA1000 CAN errors (compatible to NXP LPC2119) */
170 struct cpc_sja1000_can_error {
171         u8 ecc;
172         u8 rxerr;
173         u8 txerr;
174 };
175
176 /* structure for CAN error conditions */
177 struct cpc_can_error {
178         u8 ecode;
179
180         struct {
181                 u8 cc_type;
182
183                 /* Other controllers may also provide error code capture regs */
184                 union {
185                         struct cpc_sja1000_can_error sja1000;
186                 } regs;
187         } cc;
188 };
189
190 /*
191  * Structure containing RX/TX error counter. This structure is used to request
192  * the values of the CAN controllers TX and RX error counter.
193  */
194 struct cpc_can_err_counter {
195         u8 rx;
196         u8 tx;
197 };
198
199 /* Main message type used between library and application */
200 struct __packed ems_cpc_msg {
201         u8 type;        /* type of message */
202         u8 length;      /* length of data within union 'msg' */
203         u8 msgid;       /* confirmation handle */
204         u32 ts_sec;     /* timestamp in seconds */
205         u32 ts_nsec;    /* timestamp in nano seconds */
206
207         union {
208                 u8 generic[64];
209                 struct cpc_can_msg can_msg;
210                 struct cpc_can_params can_params;
211                 struct cpc_confirm confirmation;
212                 struct cpc_overrun overrun;
213                 struct cpc_can_error error;
214                 struct cpc_can_err_counter err_counter;
215                 u8 can_state;
216         } msg;
217 };
218
219 /*
220  * Table of devices that work with this driver
221  * NOTE: This driver supports only CPC-USB/ARM7 (LPC2119) yet.
222  */
223 static struct usb_device_id ems_usb_table[] = {
224         {USB_DEVICE(USB_CPCUSB_VENDOR_ID, USB_CPCUSB_ARM7_PRODUCT_ID)},
225         {} /* Terminating entry */
226 };
227
228 MODULE_DEVICE_TABLE(usb, ems_usb_table);
229
230 #define RX_BUFFER_SIZE      64
231 #define CPC_HEADER_SIZE     4
232 #define INTR_IN_BUFFER_SIZE 4
233
234 #define MAX_RX_URBS 10
235 #define MAX_TX_URBS 10
236
237 struct ems_usb;
238
239 struct ems_tx_urb_context {
240         struct ems_usb *dev;
241
242         u32 echo_index;
243         u8 dlc;
244 };
245
246 struct ems_usb {
247         struct can_priv can; /* must be the first member */
248         int open_time;
249
250         struct sk_buff *echo_skb[MAX_TX_URBS];
251
252         struct usb_device *udev;
253         struct net_device *netdev;
254
255         atomic_t active_tx_urbs;
256         struct usb_anchor tx_submitted;
257         struct ems_tx_urb_context tx_contexts[MAX_TX_URBS];
258
259         struct usb_anchor rx_submitted;
260
261         struct urb *intr_urb;
262
263         u8 *tx_msg_buffer;
264
265         u8 *intr_in_buffer;
266         unsigned int free_slots; /* remember number of available slots */
267
268         struct ems_cpc_msg active_params; /* active controller parameters */
269 };
270
271 static void ems_usb_read_interrupt_callback(struct urb *urb)
272 {
273         struct ems_usb *dev = urb->context;
274         struct net_device *netdev = dev->netdev;
275         int err;
276
277         if (!netif_device_present(netdev))
278                 return;
279
280         switch (urb->status) {
281         case 0:
282                 dev->free_slots = dev->intr_in_buffer[1];
283                 break;
284
285         case -ECONNRESET: /* unlink */
286         case -ENOENT:
287         case -ESHUTDOWN:
288                 return;
289
290         default:
291                 dev_info(netdev->dev.parent, "Rx interrupt aborted %d\n",
292                          urb->status);
293                 break;
294         }
295
296         err = usb_submit_urb(urb, GFP_ATOMIC);
297
298         if (err == -ENODEV)
299                 netif_device_detach(netdev);
300         else if (err)
301                 dev_err(netdev->dev.parent,
302                         "failed resubmitting intr urb: %d\n", err);
303 }
304
305 static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
306 {
307         struct can_frame *cf;
308         struct sk_buff *skb;
309         int i;
310         struct net_device_stats *stats = &dev->netdev->stats;
311
312         skb = alloc_can_skb(dev->netdev, &cf);
313         if (skb == NULL)
314                 return;
315
316         cf->can_id = le32_to_cpu(msg->msg.can_msg.id);
317         cf->can_dlc = get_can_dlc(msg->msg.can_msg.length & 0xF);
318
319         if (msg->type == CPC_MSG_TYPE_EXT_CAN_FRAME ||
320             msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME)
321                 cf->can_id |= CAN_EFF_FLAG;
322
323         if (msg->type == CPC_MSG_TYPE_RTR_FRAME ||
324             msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME) {
325                 cf->can_id |= CAN_RTR_FLAG;
326         } else {
327                 for (i = 0; i < cf->can_dlc; i++)
328                         cf->data[i] = msg->msg.can_msg.msg[i];
329         }
330
331         netif_rx(skb);
332
333         stats->rx_packets++;
334         stats->rx_bytes += cf->can_dlc;
335 }
336
337 static void ems_usb_rx_err(struct ems_usb *dev, struct ems_cpc_msg *msg)
338 {
339         struct can_frame *cf;
340         struct sk_buff *skb;
341         struct net_device_stats *stats = &dev->netdev->stats;
342
343         skb = alloc_can_err_skb(dev->netdev, &cf);
344         if (skb == NULL)
345                 return;
346
347         if (msg->type == CPC_MSG_TYPE_CAN_STATE) {
348                 u8 state = msg->msg.can_state;
349
350                 if (state & SJA1000_SR_BS) {
351                         dev->can.state = CAN_STATE_BUS_OFF;
352                         cf->can_id |= CAN_ERR_BUSOFF;
353
354                         can_bus_off(dev->netdev);
355                 } else if (state & SJA1000_SR_ES) {
356                         dev->can.state = CAN_STATE_ERROR_WARNING;
357                         dev->can.can_stats.error_warning++;
358                 } else {
359                         dev->can.state = CAN_STATE_ERROR_ACTIVE;
360                         dev->can.can_stats.error_passive++;
361                 }
362         } else if (msg->type == CPC_MSG_TYPE_CAN_FRAME_ERROR) {
363                 u8 ecc = msg->msg.error.cc.regs.sja1000.ecc;
364                 u8 txerr = msg->msg.error.cc.regs.sja1000.txerr;
365                 u8 rxerr = msg->msg.error.cc.regs.sja1000.rxerr;
366
367                 /* bus error interrupt */
368                 dev->can.can_stats.bus_error++;
369                 stats->rx_errors++;
370
371                 cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
372
373                 switch (ecc & SJA1000_ECC_MASK) {
374                 case SJA1000_ECC_BIT:
375                         cf->data[2] |= CAN_ERR_PROT_BIT;
376                         break;
377                 case SJA1000_ECC_FORM:
378                         cf->data[2] |= CAN_ERR_PROT_FORM;
379                         break;
380                 case SJA1000_ECC_STUFF:
381                         cf->data[2] |= CAN_ERR_PROT_STUFF;
382                         break;
383                 default:
384                         cf->data[2] |= CAN_ERR_PROT_UNSPEC;
385                         cf->data[3] = ecc & SJA1000_ECC_SEG;
386                         break;
387                 }
388
389                 /* Error occurred during transmission? */
390                 if ((ecc & SJA1000_ECC_DIR) == 0)
391                         cf->data[2] |= CAN_ERR_PROT_TX;
392
393                 if (dev->can.state == CAN_STATE_ERROR_WARNING ||
394                     dev->can.state == CAN_STATE_ERROR_PASSIVE) {
395                         cf->data[1] = (txerr > rxerr) ?
396                             CAN_ERR_CRTL_TX_PASSIVE : CAN_ERR_CRTL_RX_PASSIVE;
397                 }
398         } else if (msg->type == CPC_MSG_TYPE_OVERRUN) {
399                 cf->can_id |= CAN_ERR_CRTL;
400                 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
401
402                 stats->rx_over_errors++;
403                 stats->rx_errors++;
404         }
405
406         netif_rx(skb);
407
408         stats->rx_packets++;
409         stats->rx_bytes += cf->can_dlc;
410 }
411
412 /*
413  * callback for bulk IN urb
414  */
415 static void ems_usb_read_bulk_callback(struct urb *urb)
416 {
417         struct ems_usb *dev = urb->context;
418         struct net_device *netdev;
419         int retval;
420
421         netdev = dev->netdev;
422
423         if (!netif_device_present(netdev))
424                 return;
425
426         switch (urb->status) {
427         case 0: /* success */
428                 break;
429
430         case -ENOENT:
431                 return;
432
433         default:
434                 dev_info(netdev->dev.parent, "Rx URB aborted (%d)\n",
435                          urb->status);
436                 goto resubmit_urb;
437         }
438
439         if (urb->actual_length > CPC_HEADER_SIZE) {
440                 struct ems_cpc_msg *msg;
441                 u8 *ibuf = urb->transfer_buffer;
442                 u8 msg_count, again, start;
443
444                 msg_count = ibuf[0] & ~0x80;
445                 again = ibuf[0] & 0x80;
446
447                 start = CPC_HEADER_SIZE;
448
449                 while (msg_count) {
450                         msg = (struct ems_cpc_msg *)&ibuf[start];
451
452                         switch (msg->type) {
453                         case CPC_MSG_TYPE_CAN_STATE:
454                                 /* Process CAN state changes */
455                                 ems_usb_rx_err(dev, msg);
456                                 break;
457
458                         case CPC_MSG_TYPE_CAN_FRAME:
459                         case CPC_MSG_TYPE_EXT_CAN_FRAME:
460                         case CPC_MSG_TYPE_RTR_FRAME:
461                         case CPC_MSG_TYPE_EXT_RTR_FRAME:
462                                 ems_usb_rx_can_msg(dev, msg);
463                                 break;
464
465                         case CPC_MSG_TYPE_CAN_FRAME_ERROR:
466                                 /* Process errorframe */
467                                 ems_usb_rx_err(dev, msg);
468                                 break;
469
470                         case CPC_MSG_TYPE_OVERRUN:
471                                 /* Message lost while receiving */
472                                 ems_usb_rx_err(dev, msg);
473                                 break;
474                         }
475
476                         start += CPC_MSG_HEADER_LEN + msg->length;
477                         msg_count--;
478
479                         if (start > urb->transfer_buffer_length) {
480                                 dev_err(netdev->dev.parent, "format error\n");
481                                 break;
482                         }
483                 }
484         }
485
486 resubmit_urb:
487         usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 2),
488                           urb->transfer_buffer, RX_BUFFER_SIZE,
489                           ems_usb_read_bulk_callback, dev);
490
491         retval = usb_submit_urb(urb, GFP_ATOMIC);
492
493         if (retval == -ENODEV)
494                 netif_device_detach(netdev);
495         else if (retval)
496                 dev_err(netdev->dev.parent,
497                         "failed resubmitting read bulk urb: %d\n", retval);
498 }
499
500 /*
501  * callback for bulk IN urb
502  */
503 static void ems_usb_write_bulk_callback(struct urb *urb)
504 {
505         struct ems_tx_urb_context *context = urb->context;
506         struct ems_usb *dev;
507         struct net_device *netdev;
508
509         BUG_ON(!context);
510
511         dev = context->dev;
512         netdev = dev->netdev;
513
514         /* free up our allocated buffer */
515         usb_free_coherent(urb->dev, urb->transfer_buffer_length,
516                           urb->transfer_buffer, urb->transfer_dma);
517
518         atomic_dec(&dev->active_tx_urbs);
519
520         if (!netif_device_present(netdev))
521                 return;
522
523         if (urb->status)
524                 dev_info(netdev->dev.parent, "Tx URB aborted (%d)\n",
525                          urb->status);
526
527         netdev->trans_start = jiffies;
528
529         /* transmission complete interrupt */
530         netdev->stats.tx_packets++;
531         netdev->stats.tx_bytes += context->dlc;
532
533         can_get_echo_skb(netdev, context->echo_index);
534
535         /* Release context */
536         context->echo_index = MAX_TX_URBS;
537
538         if (netif_queue_stopped(netdev))
539                 netif_wake_queue(netdev);
540 }
541
542 /*
543  * Send the given CPC command synchronously
544  */
545 static int ems_usb_command_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
546 {
547         int actual_length;
548
549         /* Copy payload */
550         memcpy(&dev->tx_msg_buffer[CPC_HEADER_SIZE], msg,
551                msg->length + CPC_MSG_HEADER_LEN);
552
553         /* Clear header */
554         memset(&dev->tx_msg_buffer[0], 0, CPC_HEADER_SIZE);
555
556         return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2),
557                             &dev->tx_msg_buffer[0],
558                             msg->length + CPC_MSG_HEADER_LEN + CPC_HEADER_SIZE,
559                             &actual_length, 1000);
560 }
561
562 /*
563  * Change CAN controllers' mode register
564  */
565 static int ems_usb_write_mode(struct ems_usb *dev, u8 mode)
566 {
567         dev->active_params.msg.can_params.cc_params.sja1000.mode = mode;
568
569         return ems_usb_command_msg(dev, &dev->active_params);
570 }
571
572 /*
573  * Send a CPC_Control command to change behaviour when interface receives a CAN
574  * message, bus error or CAN state changed notifications.
575  */
576 static int ems_usb_control_cmd(struct ems_usb *dev, u8 val)
577 {
578         struct ems_cpc_msg cmd;
579
580         cmd.type = CPC_CMD_TYPE_CONTROL;
581         cmd.length = CPC_MSG_HEADER_LEN + 1;
582
583         cmd.msgid = 0;
584
585         cmd.msg.generic[0] = val;
586
587         return ems_usb_command_msg(dev, &cmd);
588 }
589
590 /*
591  * Start interface
592  */
593 static int ems_usb_start(struct ems_usb *dev)
594 {
595         struct net_device *netdev = dev->netdev;
596         int err, i;
597
598         dev->intr_in_buffer[0] = 0;
599         dev->free_slots = 15; /* initial size */
600
601         for (i = 0; i < MAX_RX_URBS; i++) {
602                 struct urb *urb = NULL;
603                 u8 *buf = NULL;
604
605                 /* create a URB, and a buffer for it */
606                 urb = usb_alloc_urb(0, GFP_KERNEL);
607                 if (!urb) {
608                         dev_err(netdev->dev.parent,
609                                 "No memory left for URBs\n");
610                         return -ENOMEM;
611                 }
612
613                 buf = usb_alloc_coherent(dev->udev, RX_BUFFER_SIZE, GFP_KERNEL,
614                                          &urb->transfer_dma);
615                 if (!buf) {
616                         dev_err(netdev->dev.parent,
617                                 "No memory left for USB buffer\n");
618                         usb_free_urb(urb);
619                         return -ENOMEM;
620                 }
621
622                 usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 2),
623                                   buf, RX_BUFFER_SIZE,
624                                   ems_usb_read_bulk_callback, dev);
625                 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
626                 usb_anchor_urb(urb, &dev->rx_submitted);
627
628                 err = usb_submit_urb(urb, GFP_KERNEL);
629                 if (err) {
630                         if (err == -ENODEV)
631                                 netif_device_detach(dev->netdev);
632
633                         usb_unanchor_urb(urb);
634                         usb_free_coherent(dev->udev, RX_BUFFER_SIZE, buf,
635                                           urb->transfer_dma);
636                         break;
637                 }
638
639                 /* Drop reference, USB core will take care of freeing it */
640                 usb_free_urb(urb);
641         }
642
643         /* Did we submit any URBs */
644         if (i == 0) {
645                 dev_warn(netdev->dev.parent, "couldn't setup read URBs\n");
646                 return err;
647         }
648
649         /* Warn if we've couldn't transmit all the URBs */
650         if (i < MAX_RX_URBS)
651                 dev_warn(netdev->dev.parent, "rx performance may be slow\n");
652
653         /* Setup and start interrupt URB */
654         usb_fill_int_urb(dev->intr_urb, dev->udev,
655                          usb_rcvintpipe(dev->udev, 1),
656                          dev->intr_in_buffer,
657                          INTR_IN_BUFFER_SIZE,
658                          ems_usb_read_interrupt_callback, dev, 1);
659
660         err = usb_submit_urb(dev->intr_urb, GFP_KERNEL);
661         if (err) {
662                 if (err == -ENODEV)
663                         netif_device_detach(dev->netdev);
664
665                 dev_warn(netdev->dev.parent, "intr URB submit failed: %d\n",
666                          err);
667
668                 return err;
669         }
670
671         /* CPC-USB will transfer received message to host */
672         err = ems_usb_control_cmd(dev, CONTR_CAN_MESSAGE | CONTR_CONT_ON);
673         if (err)
674                 goto failed;
675
676         /* CPC-USB will transfer CAN state changes to host */
677         err = ems_usb_control_cmd(dev, CONTR_CAN_STATE | CONTR_CONT_ON);
678         if (err)
679                 goto failed;
680
681         /* CPC-USB will transfer bus errors to host */
682         err = ems_usb_control_cmd(dev, CONTR_BUS_ERROR | CONTR_CONT_ON);
683         if (err)
684                 goto failed;
685
686         err = ems_usb_write_mode(dev, SJA1000_MOD_NORMAL);
687         if (err)
688                 goto failed;
689
690         dev->can.state = CAN_STATE_ERROR_ACTIVE;
691
692         return 0;
693
694 failed:
695         if (err == -ENODEV)
696                 netif_device_detach(dev->netdev);
697
698         dev_warn(netdev->dev.parent, "couldn't submit control: %d\n", err);
699
700         return err;
701 }
702
703 static void unlink_all_urbs(struct ems_usb *dev)
704 {
705         int i;
706
707         usb_unlink_urb(dev->intr_urb);
708
709         usb_kill_anchored_urbs(&dev->rx_submitted);
710
711         usb_kill_anchored_urbs(&dev->tx_submitted);
712         atomic_set(&dev->active_tx_urbs, 0);
713
714         for (i = 0; i < MAX_TX_URBS; i++)
715                 dev->tx_contexts[i].echo_index = MAX_TX_URBS;
716 }
717
718 static int ems_usb_open(struct net_device *netdev)
719 {
720         struct ems_usb *dev = netdev_priv(netdev);
721         int err;
722
723         err = ems_usb_write_mode(dev, SJA1000_MOD_RM);
724         if (err)
725                 return err;
726
727         /* common open */
728         err = open_candev(netdev);
729         if (err)
730                 return err;
731
732         /* finally start device */
733         err = ems_usb_start(dev);
734         if (err) {
735                 if (err == -ENODEV)
736                         netif_device_detach(dev->netdev);
737
738                 dev_warn(netdev->dev.parent, "couldn't start device: %d\n",
739                          err);
740
741                 close_candev(netdev);
742
743                 return err;
744         }
745
746         dev->open_time = jiffies;
747
748         netif_start_queue(netdev);
749
750         return 0;
751 }
752
753 static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *netdev)
754 {
755         struct ems_usb *dev = netdev_priv(netdev);
756         struct ems_tx_urb_context *context = NULL;
757         struct net_device_stats *stats = &netdev->stats;
758         struct can_frame *cf = (struct can_frame *)skb->data;
759         struct ems_cpc_msg *msg;
760         struct urb *urb;
761         u8 *buf;
762         int i, err;
763         size_t size = CPC_HEADER_SIZE + CPC_MSG_HEADER_LEN
764                         + sizeof(struct cpc_can_msg);
765
766         if (can_dropped_invalid_skb(netdev, skb))
767                 return NETDEV_TX_OK;
768
769         /* create a URB, and a buffer for it, and copy the data to the URB */
770         urb = usb_alloc_urb(0, GFP_ATOMIC);
771         if (!urb) {
772                 dev_err(netdev->dev.parent, "No memory left for URBs\n");
773                 goto nomem;
774         }
775
776         buf = usb_alloc_coherent(dev->udev, size, GFP_ATOMIC, &urb->transfer_dma);
777         if (!buf) {
778                 dev_err(netdev->dev.parent, "No memory left for USB buffer\n");
779                 usb_free_urb(urb);
780                 goto nomem;
781         }
782
783         msg = (struct ems_cpc_msg *)&buf[CPC_HEADER_SIZE];
784
785         msg->msg.can_msg.id = cf->can_id & CAN_ERR_MASK;
786         msg->msg.can_msg.length = cf->can_dlc;
787
788         if (cf->can_id & CAN_RTR_FLAG) {
789                 msg->type = cf->can_id & CAN_EFF_FLAG ?
790                         CPC_CMD_TYPE_EXT_RTR_FRAME : CPC_CMD_TYPE_RTR_FRAME;
791
792                 msg->length = CPC_CAN_MSG_MIN_SIZE;
793         } else {
794                 msg->type = cf->can_id & CAN_EFF_FLAG ?
795                         CPC_CMD_TYPE_EXT_CAN_FRAME : CPC_CMD_TYPE_CAN_FRAME;
796
797                 for (i = 0; i < cf->can_dlc; i++)
798                         msg->msg.can_msg.msg[i] = cf->data[i];
799
800                 msg->length = CPC_CAN_MSG_MIN_SIZE + cf->can_dlc;
801         }
802
803         /* Respect byte order */
804         msg->msg.can_msg.id = cpu_to_le32(msg->msg.can_msg.id);
805
806         for (i = 0; i < MAX_TX_URBS; i++) {
807                 if (dev->tx_contexts[i].echo_index == MAX_TX_URBS) {
808                         context = &dev->tx_contexts[i];
809                         break;
810                 }
811         }
812
813         /*
814          * May never happen! When this happens we'd more URBs in flight as
815          * allowed (MAX_TX_URBS).
816          */
817         if (!context) {
818                 usb_unanchor_urb(urb);
819                 usb_free_coherent(dev->udev, size, buf, urb->transfer_dma);
820
821                 dev_warn(netdev->dev.parent, "couldn't find free context\n");
822
823                 return NETDEV_TX_BUSY;
824         }
825
826         context->dev = dev;
827         context->echo_index = i;
828         context->dlc = cf->can_dlc;
829
830         usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, 2), buf,
831                           size, ems_usb_write_bulk_callback, context);
832         urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
833         usb_anchor_urb(urb, &dev->tx_submitted);
834
835         can_put_echo_skb(skb, netdev, context->echo_index);
836
837         atomic_inc(&dev->active_tx_urbs);
838
839         err = usb_submit_urb(urb, GFP_ATOMIC);
840         if (unlikely(err)) {
841                 can_free_echo_skb(netdev, context->echo_index);
842
843                 usb_unanchor_urb(urb);
844                 usb_free_coherent(dev->udev, size, buf, urb->transfer_dma);
845                 dev_kfree_skb(skb);
846
847                 atomic_dec(&dev->active_tx_urbs);
848
849                 if (err == -ENODEV) {
850                         netif_device_detach(netdev);
851                 } else {
852                         dev_warn(netdev->dev.parent, "failed tx_urb %d\n", err);
853
854                         stats->tx_dropped++;
855                 }
856         } else {
857                 netdev->trans_start = jiffies;
858
859                 /* Slow down tx path */
860                 if (atomic_read(&dev->active_tx_urbs) >= MAX_TX_URBS ||
861                     dev->free_slots < 5) {
862                         netif_stop_queue(netdev);
863                 }
864         }
865
866         /*
867          * Release our reference to this URB, the USB core will eventually free
868          * it entirely.
869          */
870         usb_free_urb(urb);
871
872         return NETDEV_TX_OK;
873
874 nomem:
875         dev_kfree_skb(skb);
876         stats->tx_dropped++;
877
878         return NETDEV_TX_OK;
879 }
880
881 static int ems_usb_close(struct net_device *netdev)
882 {
883         struct ems_usb *dev = netdev_priv(netdev);
884
885         /* Stop polling */
886         unlink_all_urbs(dev);
887
888         netif_stop_queue(netdev);
889
890         /* Set CAN controller to reset mode */
891         if (ems_usb_write_mode(dev, SJA1000_MOD_RM))
892                 dev_warn(netdev->dev.parent, "couldn't stop device");
893
894         close_candev(netdev);
895
896         dev->open_time = 0;
897
898         return 0;
899 }
900
901 static const struct net_device_ops ems_usb_netdev_ops = {
902         .ndo_open = ems_usb_open,
903         .ndo_stop = ems_usb_close,
904         .ndo_start_xmit = ems_usb_start_xmit,
905 };
906
907 static struct can_bittiming_const ems_usb_bittiming_const = {
908         .name = "ems_usb",
909         .tseg1_min = 1,
910         .tseg1_max = 16,
911         .tseg2_min = 1,
912         .tseg2_max = 8,
913         .sjw_max = 4,
914         .brp_min = 1,
915         .brp_max = 64,
916         .brp_inc = 1,
917 };
918
919 static int ems_usb_set_mode(struct net_device *netdev, enum can_mode mode)
920 {
921         struct ems_usb *dev = netdev_priv(netdev);
922
923         if (!dev->open_time)
924                 return -EINVAL;
925
926         switch (mode) {
927         case CAN_MODE_START:
928                 if (ems_usb_write_mode(dev, SJA1000_MOD_NORMAL))
929                         dev_warn(netdev->dev.parent, "couldn't start device");
930
931                 if (netif_queue_stopped(netdev))
932                         netif_wake_queue(netdev);
933                 break;
934
935         default:
936                 return -EOPNOTSUPP;
937         }
938
939         return 0;
940 }
941
942 static int ems_usb_set_bittiming(struct net_device *netdev)
943 {
944         struct ems_usb *dev = netdev_priv(netdev);
945         struct can_bittiming *bt = &dev->can.bittiming;
946         u8 btr0, btr1;
947
948         btr0 = ((bt->brp - 1) & 0x3f) | (((bt->sjw - 1) & 0x3) << 6);
949         btr1 = ((bt->prop_seg + bt->phase_seg1 - 1) & 0xf) |
950                 (((bt->phase_seg2 - 1) & 0x7) << 4);
951         if (dev->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
952                 btr1 |= 0x80;
953
954         dev_info(netdev->dev.parent, "setting BTR0=0x%02x BTR1=0x%02x\n",
955                  btr0, btr1);
956
957         dev->active_params.msg.can_params.cc_params.sja1000.btr0 = btr0;
958         dev->active_params.msg.can_params.cc_params.sja1000.btr1 = btr1;
959
960         return ems_usb_command_msg(dev, &dev->active_params);
961 }
962
963 static void init_params_sja1000(struct ems_cpc_msg *msg)
964 {
965         struct cpc_sja1000_params *sja1000 =
966                 &msg->msg.can_params.cc_params.sja1000;
967
968         msg->type = CPC_CMD_TYPE_CAN_PARAMS;
969         msg->length = sizeof(struct cpc_can_params);
970         msg->msgid = 0;
971
972         msg->msg.can_params.cc_type = CPC_CC_TYPE_SJA1000;
973
974         /* Acceptance filter open */
975         sja1000->acc_code0 = 0x00;
976         sja1000->acc_code1 = 0x00;
977         sja1000->acc_code2 = 0x00;
978         sja1000->acc_code3 = 0x00;
979
980         /* Acceptance filter open */
981         sja1000->acc_mask0 = 0xFF;
982         sja1000->acc_mask1 = 0xFF;
983         sja1000->acc_mask2 = 0xFF;
984         sja1000->acc_mask3 = 0xFF;
985
986         sja1000->btr0 = 0;
987         sja1000->btr1 = 0;
988
989         sja1000->outp_contr = SJA1000_DEFAULT_OUTPUT_CONTROL;
990         sja1000->mode = SJA1000_MOD_RM;
991 }
992
993 /*
994  * probe function for new CPC-USB devices
995  */
996 static int ems_usb_probe(struct usb_interface *intf,
997                          const struct usb_device_id *id)
998 {
999         struct net_device *netdev;
1000         struct ems_usb *dev;
1001         int i, err = -ENOMEM;
1002
1003         netdev = alloc_candev(sizeof(struct ems_usb), MAX_TX_URBS);
1004         if (!netdev) {
1005                 dev_err(&intf->dev, "ems_usb: Couldn't alloc candev\n");
1006                 return -ENOMEM;
1007         }
1008
1009         dev = netdev_priv(netdev);
1010
1011         dev->udev = interface_to_usbdev(intf);
1012         dev->netdev = netdev;
1013
1014         dev->can.state = CAN_STATE_STOPPED;
1015         dev->can.clock.freq = EMS_USB_ARM7_CLOCK;
1016         dev->can.bittiming_const = &ems_usb_bittiming_const;
1017         dev->can.do_set_bittiming = ems_usb_set_bittiming;
1018         dev->can.do_set_mode = ems_usb_set_mode;
1019         dev->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES;
1020
1021         netdev->netdev_ops = &ems_usb_netdev_ops;
1022
1023         netdev->flags |= IFF_ECHO; /* we support local echo */
1024
1025         init_usb_anchor(&dev->rx_submitted);
1026
1027         init_usb_anchor(&dev->tx_submitted);
1028         atomic_set(&dev->active_tx_urbs, 0);
1029
1030         for (i = 0; i < MAX_TX_URBS; i++)
1031                 dev->tx_contexts[i].echo_index = MAX_TX_URBS;
1032
1033         dev->intr_urb = usb_alloc_urb(0, GFP_KERNEL);
1034         if (!dev->intr_urb) {
1035                 dev_err(&intf->dev, "Couldn't alloc intr URB\n");
1036                 goto cleanup_candev;
1037         }
1038
1039         dev->intr_in_buffer = kzalloc(INTR_IN_BUFFER_SIZE, GFP_KERNEL);
1040         if (!dev->intr_in_buffer) {
1041                 dev_err(&intf->dev, "Couldn't alloc Intr buffer\n");
1042                 goto cleanup_intr_urb;
1043         }
1044
1045         dev->tx_msg_buffer = kzalloc(CPC_HEADER_SIZE +
1046                                      sizeof(struct ems_cpc_msg), GFP_KERNEL);
1047         if (!dev->tx_msg_buffer) {
1048                 dev_err(&intf->dev, "Couldn't alloc Tx buffer\n");
1049                 goto cleanup_intr_in_buffer;
1050         }
1051
1052         usb_set_intfdata(intf, dev);
1053
1054         SET_NETDEV_DEV(netdev, &intf->dev);
1055
1056         init_params_sja1000(&dev->active_params);
1057
1058         err = ems_usb_command_msg(dev, &dev->active_params);
1059         if (err) {
1060                 dev_err(netdev->dev.parent,
1061                         "couldn't initialize controller: %d\n", err);
1062                 goto cleanup_tx_msg_buffer;
1063         }
1064
1065         err = register_candev(netdev);
1066         if (err) {
1067                 dev_err(netdev->dev.parent,
1068                         "couldn't register CAN device: %d\n", err);
1069                 goto cleanup_tx_msg_buffer;
1070         }
1071
1072         return 0;
1073
1074 cleanup_tx_msg_buffer:
1075         kfree(dev->tx_msg_buffer);
1076
1077 cleanup_intr_in_buffer:
1078         kfree(dev->intr_in_buffer);
1079
1080 cleanup_intr_urb:
1081         usb_free_urb(dev->intr_urb);
1082
1083 cleanup_candev:
1084         free_candev(netdev);
1085
1086         return err;
1087 }
1088
1089 /*
1090  * called by the usb core when the device is removed from the system
1091  */
1092 static void ems_usb_disconnect(struct usb_interface *intf)
1093 {
1094         struct ems_usb *dev = usb_get_intfdata(intf);
1095
1096         usb_set_intfdata(intf, NULL);
1097
1098         if (dev) {
1099                 unregister_netdev(dev->netdev);
1100                 free_candev(dev->netdev);
1101
1102                 unlink_all_urbs(dev);
1103
1104                 usb_free_urb(dev->intr_urb);
1105
1106                 kfree(dev->intr_in_buffer);
1107         }
1108 }
1109
1110 /* usb specific object needed to register this driver with the usb subsystem */
1111 static struct usb_driver ems_usb_driver = {
1112         .name = "ems_usb",
1113         .probe = ems_usb_probe,
1114         .disconnect = ems_usb_disconnect,
1115         .id_table = ems_usb_table,
1116 };
1117
1118 static int __init ems_usb_init(void)
1119 {
1120         int err;
1121
1122         printk(KERN_INFO "CPC-USB kernel driver loaded\n");
1123
1124         /* register this driver with the USB subsystem */
1125         err = usb_register(&ems_usb_driver);
1126
1127         if (err) {
1128                 err("usb_register failed. Error number %d\n", err);
1129                 return err;
1130         }
1131
1132         return 0;
1133 }
1134
1135 static void __exit ems_usb_exit(void)
1136 {
1137         /* deregister this driver with the USB subsystem */
1138         usb_deregister(&ems_usb_driver);
1139 }
1140
1141 module_init(ems_usb_init);
1142 module_exit(ems_usb_exit);