GNU Linux-libre 5.10.215-gnu1
[releases.git] / drivers / net / can / janz-ican3.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Janz MODULbus VMOD-ICAN3 CAN Interface Driver
4  *
5  * Copyright (c) 2010 Ira W. Snyder <iws@ovro.caltech.edu>
6  */
7
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/interrupt.h>
11 #include <linux/delay.h>
12 #include <linux/platform_device.h>
13
14 #include <linux/netdevice.h>
15 #include <linux/can.h>
16 #include <linux/can/dev.h>
17 #include <linux/can/skb.h>
18 #include <linux/can/error.h>
19
20 #include <linux/mfd/janz.h>
21 #include <asm/io.h>
22
23 /* the DPM has 64k of memory, organized into 256x 256 byte pages */
24 #define DPM_NUM_PAGES           256
25 #define DPM_PAGE_SIZE           256
26 #define DPM_PAGE_ADDR(p)        ((p) * DPM_PAGE_SIZE)
27
28 /* JANZ ICAN3 "old-style" host interface queue page numbers */
29 #define QUEUE_OLD_CONTROL       0
30 #define QUEUE_OLD_RB0           1
31 #define QUEUE_OLD_RB1           2
32 #define QUEUE_OLD_WB0           3
33 #define QUEUE_OLD_WB1           4
34
35 /* Janz ICAN3 "old-style" host interface control registers */
36 #define MSYNC_PEER              0x00            /* ICAN only */
37 #define MSYNC_LOCL              0x01            /* host only */
38 #define TARGET_RUNNING          0x02
39 #define FIRMWARE_STAMP          0x60            /* big endian firmware stamp */
40
41 #define MSYNC_RB0               0x01
42 #define MSYNC_RB1               0x02
43 #define MSYNC_RBLW              0x04
44 #define MSYNC_RB_MASK           (MSYNC_RB0 | MSYNC_RB1)
45
46 #define MSYNC_WB0               0x10
47 #define MSYNC_WB1               0x20
48 #define MSYNC_WBLW              0x40
49 #define MSYNC_WB_MASK           (MSYNC_WB0 | MSYNC_WB1)
50
51 /* Janz ICAN3 "new-style" host interface queue page numbers */
52 #define QUEUE_TOHOST            5
53 #define QUEUE_FROMHOST_MID      6
54 #define QUEUE_FROMHOST_HIGH     7
55 #define QUEUE_FROMHOST_LOW      8
56
57 /* The first free page in the DPM is #9 */
58 #define DPM_FREE_START          9
59
60 /* Janz ICAN3 "new-style" and "fast" host interface descriptor flags */
61 #define DESC_VALID              0x80
62 #define DESC_WRAP               0x40
63 #define DESC_INTERRUPT          0x20
64 #define DESC_IVALID             0x10
65 #define DESC_LEN(len)           (len)
66
67 /* Janz ICAN3 Firmware Messages */
68 #define MSG_CONNECTI            0x02
69 #define MSG_DISCONNECT          0x03
70 #define MSG_IDVERS              0x04
71 #define MSG_MSGLOST             0x05
72 #define MSG_NEWHOSTIF           0x08
73 #define MSG_INQUIRY             0x0a
74 #define MSG_SETAFILMASK         0x10
75 #define MSG_INITFDPMQUEUE       0x11
76 #define MSG_HWCONF              0x12
77 #define MSG_FMSGLOST            0x15
78 #define MSG_CEVTIND             0x37
79 #define MSG_CBTRREQ             0x41
80 #define MSG_COFFREQ             0x42
81 #define MSG_CONREQ              0x43
82 #define MSG_CCONFREQ            0x47
83 #define MSG_NMTS                0xb0
84 #define MSG_LMTS                0xb4
85
86 /*
87  * Janz ICAN3 CAN Inquiry Message Types
88  *
89  * NOTE: there appears to be a firmware bug here. You must send
90  * NOTE: INQUIRY_STATUS and expect to receive an INQUIRY_EXTENDED
91  * NOTE: response. The controller never responds to a message with
92  * NOTE: the INQUIRY_EXTENDED subspec :(
93  */
94 #define INQUIRY_STATUS          0x00
95 #define INQUIRY_TERMINATION     0x01
96 #define INQUIRY_EXTENDED        0x04
97
98 /* Janz ICAN3 CAN Set Acceptance Filter Mask Message Types */
99 #define SETAFILMASK_REJECT      0x00
100 #define SETAFILMASK_FASTIF      0x02
101
102 /* Janz ICAN3 CAN Hardware Configuration Message Types */
103 #define HWCONF_TERMINATE_ON     0x01
104 #define HWCONF_TERMINATE_OFF    0x00
105
106 /* Janz ICAN3 CAN Event Indication Message Types */
107 #define CEVTIND_EI              0x01
108 #define CEVTIND_DOI             0x02
109 #define CEVTIND_LOST            0x04
110 #define CEVTIND_FULL            0x08
111 #define CEVTIND_BEI             0x10
112
113 #define CEVTIND_CHIP_SJA1000    0x02
114
115 #define ICAN3_BUSERR_QUOTA_MAX  255
116
117 /* Janz ICAN3 CAN Frame Conversion */
118 #define ICAN3_SNGL      0x02
119 #define ICAN3_ECHO      0x10
120 #define ICAN3_EFF_RTR   0x40
121 #define ICAN3_SFF_RTR   0x10
122 #define ICAN3_EFF       0x80
123
124 #define ICAN3_CAN_TYPE_MASK     0x0f
125 #define ICAN3_CAN_TYPE_SFF      0x00
126 #define ICAN3_CAN_TYPE_EFF      0x01
127
128 #define ICAN3_CAN_DLC_MASK      0x0f
129
130 /* Janz ICAN3 NMTS subtypes */
131 #define NMTS_CREATE_NODE_REQ    0x0
132 #define NMTS_SLAVE_STATE_IND    0x8
133 #define NMTS_SLAVE_EVENT_IND    0x9
134
135 /* Janz ICAN3 LMTS subtypes */
136 #define LMTS_BUSON_REQ          0x0
137 #define LMTS_BUSOFF_REQ         0x1
138 #define LMTS_CAN_CONF_REQ       0x2
139
140 /* Janz ICAN3 NMTS Event indications */
141 #define NE_LOCAL_OCCURRED       0x3
142 #define NE_LOCAL_RESOLVED       0x2
143 #define NE_REMOTE_OCCURRED      0xc
144 #define NE_REMOTE_RESOLVED      0x8
145
146 /*
147  * SJA1000 Status and Error Register Definitions
148  *
149  * Copied from drivers/net/can/sja1000/sja1000.h
150  */
151
152 /* status register content */
153 #define SR_BS           0x80
154 #define SR_ES           0x40
155 #define SR_TS           0x20
156 #define SR_RS           0x10
157 #define SR_TCS          0x08
158 #define SR_TBS          0x04
159 #define SR_DOS          0x02
160 #define SR_RBS          0x01
161
162 #define SR_CRIT (SR_BS|SR_ES)
163
164 /* ECC register */
165 #define ECC_SEG         0x1F
166 #define ECC_DIR         0x20
167 #define ECC_ERR         6
168 #define ECC_BIT         0x00
169 #define ECC_FORM        0x40
170 #define ECC_STUFF       0x80
171 #define ECC_MASK        0xc0
172
173 /* Number of buffers for use in the "new-style" host interface */
174 #define ICAN3_NEW_BUFFERS       16
175
176 /* Number of buffers for use in the "fast" host interface */
177 #define ICAN3_TX_BUFFERS        512
178 #define ICAN3_RX_BUFFERS        1024
179
180 /* SJA1000 Clock Input */
181 #define ICAN3_CAN_CLOCK         8000000
182
183 /* Janz ICAN3 firmware types */
184 enum ican3_fwtype {
185         ICAN3_FWTYPE_ICANOS,
186         ICAN3_FWTYPE_CAL_CANOPEN,
187 };
188
189 /* Driver Name */
190 #define DRV_NAME "janz-ican3"
191
192 /* DPM Control Registers -- starts at offset 0x100 in the MODULbus registers */
193 struct ican3_dpm_control {
194         /* window address register */
195         u8 window_address;
196         u8 unused1;
197
198         /*
199          * Read access: clear interrupt from microcontroller
200          * Write access: send interrupt to microcontroller
201          */
202         u8 interrupt;
203         u8 unused2;
204
205         /* write-only: reset all hardware on the module */
206         u8 hwreset;
207         u8 unused3;
208
209         /* write-only: generate an interrupt to the TPU */
210         u8 tpuinterrupt;
211 };
212
213 struct ican3_dev {
214
215         /* must be the first member */
216         struct can_priv can;
217
218         /* CAN network device */
219         struct net_device *ndev;
220         struct napi_struct napi;
221
222         /* module number */
223         unsigned int num;
224
225         /* base address of registers and IRQ */
226         struct janz_cmodio_onboard_regs __iomem *ctrl;
227         struct ican3_dpm_control __iomem *dpmctrl;
228         void __iomem *dpm;
229         int irq;
230
231         /* CAN bus termination status */
232         struct completion termination_comp;
233         bool termination_enabled;
234
235         /* CAN bus error status registers */
236         struct completion buserror_comp;
237         struct can_berr_counter bec;
238
239         /* firmware type */
240         enum ican3_fwtype fwtype;
241         char fwinfo[32];
242
243         /* old and new style host interface */
244         unsigned int iftype;
245
246         /* queue for echo packets */
247         struct sk_buff_head echoq;
248
249         /*
250          * Any function which changes the current DPM page must hold this
251          * lock while it is performing data accesses. This ensures that the
252          * function will not be preempted and end up reading data from a
253          * different DPM page than it expects.
254          */
255         spinlock_t lock;
256
257         /* new host interface */
258         unsigned int rx_int;
259         unsigned int rx_num;
260         unsigned int tx_num;
261
262         /* fast host interface */
263         unsigned int fastrx_start;
264         unsigned int fastrx_num;
265         unsigned int fasttx_start;
266         unsigned int fasttx_num;
267
268         /* first free DPM page */
269         unsigned int free_page;
270 };
271
272 struct ican3_msg {
273         u8 control;
274         u8 spec;
275         __le16 len;
276         u8 data[252];
277 };
278
279 struct ican3_new_desc {
280         u8 control;
281         u8 pointer;
282 };
283
284 struct ican3_fast_desc {
285         u8 control;
286         u8 command;
287         u8 data[14];
288 };
289
290 /* write to the window basic address register */
291 static inline void ican3_set_page(struct ican3_dev *mod, unsigned int page)
292 {
293         BUG_ON(page >= DPM_NUM_PAGES);
294         iowrite8(page, &mod->dpmctrl->window_address);
295 }
296
297 /*
298  * ICAN3 "old-style" host interface
299  */
300
301 /*
302  * Receive a message from the ICAN3 "old-style" firmware interface
303  *
304  * LOCKING: must hold mod->lock
305  *
306  * returns 0 on success, -ENOMEM when no message exists
307  */
308 static int ican3_old_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
309 {
310         unsigned int mbox, mbox_page;
311         u8 locl, peer, xord;
312
313         /* get the MSYNC registers */
314         ican3_set_page(mod, QUEUE_OLD_CONTROL);
315         peer = ioread8(mod->dpm + MSYNC_PEER);
316         locl = ioread8(mod->dpm + MSYNC_LOCL);
317         xord = locl ^ peer;
318
319         if ((xord & MSYNC_RB_MASK) == 0x00) {
320                 netdev_dbg(mod->ndev, "no mbox for reading\n");
321                 return -ENOMEM;
322         }
323
324         /* find the first free mbox to read */
325         if ((xord & MSYNC_RB_MASK) == MSYNC_RB_MASK)
326                 mbox = (xord & MSYNC_RBLW) ? MSYNC_RB0 : MSYNC_RB1;
327         else
328                 mbox = (xord & MSYNC_RB0) ? MSYNC_RB0 : MSYNC_RB1;
329
330         /* copy the message */
331         mbox_page = (mbox == MSYNC_RB0) ? QUEUE_OLD_RB0 : QUEUE_OLD_RB1;
332         ican3_set_page(mod, mbox_page);
333         memcpy_fromio(msg, mod->dpm, sizeof(*msg));
334
335         /*
336          * notify the firmware that the read buffer is available
337          * for it to fill again
338          */
339         locl ^= mbox;
340
341         ican3_set_page(mod, QUEUE_OLD_CONTROL);
342         iowrite8(locl, mod->dpm + MSYNC_LOCL);
343         return 0;
344 }
345
346 /*
347  * Send a message through the "old-style" firmware interface
348  *
349  * LOCKING: must hold mod->lock
350  *
351  * returns 0 on success, -ENOMEM when no free space exists
352  */
353 static int ican3_old_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
354 {
355         unsigned int mbox, mbox_page;
356         u8 locl, peer, xord;
357
358         /* get the MSYNC registers */
359         ican3_set_page(mod, QUEUE_OLD_CONTROL);
360         peer = ioread8(mod->dpm + MSYNC_PEER);
361         locl = ioread8(mod->dpm + MSYNC_LOCL);
362         xord = locl ^ peer;
363
364         if ((xord & MSYNC_WB_MASK) == MSYNC_WB_MASK) {
365                 netdev_err(mod->ndev, "no mbox for writing\n");
366                 return -ENOMEM;
367         }
368
369         /* calculate a free mbox to use */
370         mbox = (xord & MSYNC_WB0) ? MSYNC_WB1 : MSYNC_WB0;
371
372         /* copy the message to the DPM */
373         mbox_page = (mbox == MSYNC_WB0) ? QUEUE_OLD_WB0 : QUEUE_OLD_WB1;
374         ican3_set_page(mod, mbox_page);
375         memcpy_toio(mod->dpm, msg, sizeof(*msg));
376
377         locl ^= mbox;
378         if (mbox == MSYNC_WB1)
379                 locl |= MSYNC_WBLW;
380
381         ican3_set_page(mod, QUEUE_OLD_CONTROL);
382         iowrite8(locl, mod->dpm + MSYNC_LOCL);
383         return 0;
384 }
385
386 /*
387  * ICAN3 "new-style" Host Interface Setup
388  */
389
390 static void ican3_init_new_host_interface(struct ican3_dev *mod)
391 {
392         struct ican3_new_desc desc;
393         unsigned long flags;
394         void __iomem *dst;
395         int i;
396
397         spin_lock_irqsave(&mod->lock, flags);
398
399         /* setup the internal datastructures for RX */
400         mod->rx_num = 0;
401         mod->rx_int = 0;
402
403         /* tohost queue descriptors are in page 5 */
404         ican3_set_page(mod, QUEUE_TOHOST);
405         dst = mod->dpm;
406
407         /* initialize the tohost (rx) queue descriptors: pages 9-24 */
408         for (i = 0; i < ICAN3_NEW_BUFFERS; i++) {
409                 desc.control = DESC_INTERRUPT | DESC_LEN(1); /* I L=1 */
410                 desc.pointer = mod->free_page;
411
412                 /* set wrap flag on last buffer */
413                 if (i == ICAN3_NEW_BUFFERS - 1)
414                         desc.control |= DESC_WRAP;
415
416                 memcpy_toio(dst, &desc, sizeof(desc));
417                 dst += sizeof(desc);
418                 mod->free_page++;
419         }
420
421         /* fromhost (tx) mid queue descriptors are in page 6 */
422         ican3_set_page(mod, QUEUE_FROMHOST_MID);
423         dst = mod->dpm;
424
425         /* setup the internal datastructures for TX */
426         mod->tx_num = 0;
427
428         /* initialize the fromhost mid queue descriptors: pages 25-40 */
429         for (i = 0; i < ICAN3_NEW_BUFFERS; i++) {
430                 desc.control = DESC_VALID | DESC_LEN(1); /* V L=1 */
431                 desc.pointer = mod->free_page;
432
433                 /* set wrap flag on last buffer */
434                 if (i == ICAN3_NEW_BUFFERS - 1)
435                         desc.control |= DESC_WRAP;
436
437                 memcpy_toio(dst, &desc, sizeof(desc));
438                 dst += sizeof(desc);
439                 mod->free_page++;
440         }
441
442         /* fromhost hi queue descriptors are in page 7 */
443         ican3_set_page(mod, QUEUE_FROMHOST_HIGH);
444         dst = mod->dpm;
445
446         /* initialize only a single buffer in the fromhost hi queue (unused) */
447         desc.control = DESC_VALID | DESC_WRAP | DESC_LEN(1); /* VW L=1 */
448         desc.pointer = mod->free_page;
449         memcpy_toio(dst, &desc, sizeof(desc));
450         mod->free_page++;
451
452         /* fromhost low queue descriptors are in page 8 */
453         ican3_set_page(mod, QUEUE_FROMHOST_LOW);
454         dst = mod->dpm;
455
456         /* initialize only a single buffer in the fromhost low queue (unused) */
457         desc.control = DESC_VALID | DESC_WRAP | DESC_LEN(1); /* VW L=1 */
458         desc.pointer = mod->free_page;
459         memcpy_toio(dst, &desc, sizeof(desc));
460         mod->free_page++;
461
462         spin_unlock_irqrestore(&mod->lock, flags);
463 }
464
465 /*
466  * ICAN3 Fast Host Interface Setup
467  */
468
469 static void ican3_init_fast_host_interface(struct ican3_dev *mod)
470 {
471         struct ican3_fast_desc desc;
472         unsigned long flags;
473         unsigned int addr;
474         void __iomem *dst;
475         int i;
476
477         spin_lock_irqsave(&mod->lock, flags);
478
479         /* save the start recv page */
480         mod->fastrx_start = mod->free_page;
481         mod->fastrx_num = 0;
482
483         /* build a single fast tohost queue descriptor */
484         memset(&desc, 0, sizeof(desc));
485         desc.control = 0x00;
486         desc.command = 1;
487
488         /* build the tohost queue descriptor ring in memory */
489         addr = 0;
490         for (i = 0; i < ICAN3_RX_BUFFERS; i++) {
491
492                 /* set the wrap bit on the last buffer */
493                 if (i == ICAN3_RX_BUFFERS - 1)
494                         desc.control |= DESC_WRAP;
495
496                 /* switch to the correct page */
497                 ican3_set_page(mod, mod->free_page);
498
499                 /* copy the descriptor to the DPM */
500                 dst = mod->dpm + addr;
501                 memcpy_toio(dst, &desc, sizeof(desc));
502                 addr += sizeof(desc);
503
504                 /* move to the next page if necessary */
505                 if (addr >= DPM_PAGE_SIZE) {
506                         addr = 0;
507                         mod->free_page++;
508                 }
509         }
510
511         /* make sure we page-align the next queue */
512         if (addr != 0)
513                 mod->free_page++;
514
515         /* save the start xmit page */
516         mod->fasttx_start = mod->free_page;
517         mod->fasttx_num = 0;
518
519         /* build a single fast fromhost queue descriptor */
520         memset(&desc, 0, sizeof(desc));
521         desc.control = DESC_VALID;
522         desc.command = 1;
523
524         /* build the fromhost queue descriptor ring in memory */
525         addr = 0;
526         for (i = 0; i < ICAN3_TX_BUFFERS; i++) {
527
528                 /* set the wrap bit on the last buffer */
529                 if (i == ICAN3_TX_BUFFERS - 1)
530                         desc.control |= DESC_WRAP;
531
532                 /* switch to the correct page */
533                 ican3_set_page(mod, mod->free_page);
534
535                 /* copy the descriptor to the DPM */
536                 dst = mod->dpm + addr;
537                 memcpy_toio(dst, &desc, sizeof(desc));
538                 addr += sizeof(desc);
539
540                 /* move to the next page if necessary */
541                 if (addr >= DPM_PAGE_SIZE) {
542                         addr = 0;
543                         mod->free_page++;
544                 }
545         }
546
547         spin_unlock_irqrestore(&mod->lock, flags);
548 }
549
550 /*
551  * ICAN3 "new-style" Host Interface Message Helpers
552  */
553
554 /*
555  * LOCKING: must hold mod->lock
556  */
557 static int ican3_new_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
558 {
559         struct ican3_new_desc desc;
560         void __iomem *desc_addr = mod->dpm + (mod->tx_num * sizeof(desc));
561
562         /* switch to the fromhost mid queue, and read the buffer descriptor */
563         ican3_set_page(mod, QUEUE_FROMHOST_MID);
564         memcpy_fromio(&desc, desc_addr, sizeof(desc));
565
566         if (!(desc.control & DESC_VALID)) {
567                 netdev_dbg(mod->ndev, "%s: no free buffers\n", __func__);
568                 return -ENOMEM;
569         }
570
571         /* switch to the data page, copy the data */
572         ican3_set_page(mod, desc.pointer);
573         memcpy_toio(mod->dpm, msg, sizeof(*msg));
574
575         /* switch back to the descriptor, set the valid bit, write it back */
576         ican3_set_page(mod, QUEUE_FROMHOST_MID);
577         desc.control ^= DESC_VALID;
578         memcpy_toio(desc_addr, &desc, sizeof(desc));
579
580         /* update the tx number */
581         mod->tx_num = (desc.control & DESC_WRAP) ? 0 : (mod->tx_num + 1);
582         return 0;
583 }
584
585 /*
586  * LOCKING: must hold mod->lock
587  */
588 static int ican3_new_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
589 {
590         struct ican3_new_desc desc;
591         void __iomem *desc_addr = mod->dpm + (mod->rx_num * sizeof(desc));
592
593         /* switch to the tohost queue, and read the buffer descriptor */
594         ican3_set_page(mod, QUEUE_TOHOST);
595         memcpy_fromio(&desc, desc_addr, sizeof(desc));
596
597         if (!(desc.control & DESC_VALID)) {
598                 netdev_dbg(mod->ndev, "%s: no buffers to recv\n", __func__);
599                 return -ENOMEM;
600         }
601
602         /* switch to the data page, copy the data */
603         ican3_set_page(mod, desc.pointer);
604         memcpy_fromio(msg, mod->dpm, sizeof(*msg));
605
606         /* switch back to the descriptor, toggle the valid bit, write it back */
607         ican3_set_page(mod, QUEUE_TOHOST);
608         desc.control ^= DESC_VALID;
609         memcpy_toio(desc_addr, &desc, sizeof(desc));
610
611         /* update the rx number */
612         mod->rx_num = (desc.control & DESC_WRAP) ? 0 : (mod->rx_num + 1);
613         return 0;
614 }
615
616 /*
617  * Message Send / Recv Helpers
618  */
619
620 static int ican3_send_msg(struct ican3_dev *mod, struct ican3_msg *msg)
621 {
622         unsigned long flags;
623         int ret;
624
625         spin_lock_irqsave(&mod->lock, flags);
626
627         if (mod->iftype == 0)
628                 ret = ican3_old_send_msg(mod, msg);
629         else
630                 ret = ican3_new_send_msg(mod, msg);
631
632         spin_unlock_irqrestore(&mod->lock, flags);
633         return ret;
634 }
635
636 static int ican3_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg)
637 {
638         unsigned long flags;
639         int ret;
640
641         spin_lock_irqsave(&mod->lock, flags);
642
643         if (mod->iftype == 0)
644                 ret = ican3_old_recv_msg(mod, msg);
645         else
646                 ret = ican3_new_recv_msg(mod, msg);
647
648         spin_unlock_irqrestore(&mod->lock, flags);
649         return ret;
650 }
651
652 /*
653  * Quick Pre-constructed Messages
654  */
655
656 static int ican3_msg_connect(struct ican3_dev *mod)
657 {
658         struct ican3_msg msg;
659
660         memset(&msg, 0, sizeof(msg));
661         msg.spec = MSG_CONNECTI;
662         msg.len = cpu_to_le16(0);
663
664         return ican3_send_msg(mod, &msg);
665 }
666
667 static int ican3_msg_disconnect(struct ican3_dev *mod)
668 {
669         struct ican3_msg msg;
670
671         memset(&msg, 0, sizeof(msg));
672         msg.spec = MSG_DISCONNECT;
673         msg.len = cpu_to_le16(0);
674
675         return ican3_send_msg(mod, &msg);
676 }
677
678 static int ican3_msg_newhostif(struct ican3_dev *mod)
679 {
680         struct ican3_msg msg;
681         int ret;
682
683         memset(&msg, 0, sizeof(msg));
684         msg.spec = MSG_NEWHOSTIF;
685         msg.len = cpu_to_le16(0);
686
687         /* If we're not using the old interface, switching seems bogus */
688         WARN_ON(mod->iftype != 0);
689
690         ret = ican3_send_msg(mod, &msg);
691         if (ret)
692                 return ret;
693
694         /* mark the module as using the new host interface */
695         mod->iftype = 1;
696         return 0;
697 }
698
699 static int ican3_msg_fasthostif(struct ican3_dev *mod)
700 {
701         struct ican3_msg msg;
702         unsigned int addr;
703
704         memset(&msg, 0, sizeof(msg));
705         msg.spec = MSG_INITFDPMQUEUE;
706         msg.len = cpu_to_le16(8);
707
708         /* write the tohost queue start address */
709         addr = DPM_PAGE_ADDR(mod->fastrx_start);
710         msg.data[0] = addr & 0xff;
711         msg.data[1] = (addr >> 8) & 0xff;
712         msg.data[2] = (addr >> 16) & 0xff;
713         msg.data[3] = (addr >> 24) & 0xff;
714
715         /* write the fromhost queue start address */
716         addr = DPM_PAGE_ADDR(mod->fasttx_start);
717         msg.data[4] = addr & 0xff;
718         msg.data[5] = (addr >> 8) & 0xff;
719         msg.data[6] = (addr >> 16) & 0xff;
720         msg.data[7] = (addr >> 24) & 0xff;
721
722         /* If we're not using the new interface yet, we cannot do this */
723         WARN_ON(mod->iftype != 1);
724
725         return ican3_send_msg(mod, &msg);
726 }
727
728 /*
729  * Setup the CAN filter to either accept or reject all
730  * messages from the CAN bus.
731  */
732 static int ican3_set_id_filter(struct ican3_dev *mod, bool accept)
733 {
734         struct ican3_msg msg;
735         int ret;
736
737         /* Standard Frame Format */
738         memset(&msg, 0, sizeof(msg));
739         msg.spec = MSG_SETAFILMASK;
740         msg.len = cpu_to_le16(5);
741         msg.data[0] = 0x00; /* IDLo LSB */
742         msg.data[1] = 0x00; /* IDLo MSB */
743         msg.data[2] = 0xff; /* IDHi LSB */
744         msg.data[3] = 0x07; /* IDHi MSB */
745
746         /* accept all frames for fast host if, or reject all frames */
747         msg.data[4] = accept ? SETAFILMASK_FASTIF : SETAFILMASK_REJECT;
748
749         ret = ican3_send_msg(mod, &msg);
750         if (ret)
751                 return ret;
752
753         /* Extended Frame Format */
754         memset(&msg, 0, sizeof(msg));
755         msg.spec = MSG_SETAFILMASK;
756         msg.len = cpu_to_le16(13);
757         msg.data[0] = 0;    /* MUX = 0 */
758         msg.data[1] = 0x00; /* IDLo LSB */
759         msg.data[2] = 0x00;
760         msg.data[3] = 0x00;
761         msg.data[4] = 0x20; /* IDLo MSB */
762         msg.data[5] = 0xff; /* IDHi LSB */
763         msg.data[6] = 0xff;
764         msg.data[7] = 0xff;
765         msg.data[8] = 0x3f; /* IDHi MSB */
766
767         /* accept all frames for fast host if, or reject all frames */
768         msg.data[9] = accept ? SETAFILMASK_FASTIF : SETAFILMASK_REJECT;
769
770         return ican3_send_msg(mod, &msg);
771 }
772
773 /*
774  * Bring the CAN bus online or offline
775  */
776 static int ican3_set_bus_state(struct ican3_dev *mod, bool on)
777 {
778         struct can_bittiming *bt = &mod->can.bittiming;
779         struct ican3_msg msg;
780         u8 btr0, btr1;
781         int res;
782
783         /* This algorithm was stolen from drivers/net/can/sja1000/sja1000.c      */
784         /* The bittiming register command for the ICAN3 just sets the bit timing */
785         /* registers on the SJA1000 chip directly                                */
786         btr0 = ((bt->brp - 1) & 0x3f) | (((bt->sjw - 1) & 0x3) << 6);
787         btr1 = ((bt->prop_seg + bt->phase_seg1 - 1) & 0xf) |
788                 (((bt->phase_seg2 - 1) & 0x7) << 4);
789         if (mod->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
790                 btr1 |= 0x80;
791
792         if (mod->fwtype == ICAN3_FWTYPE_ICANOS) {
793                 if (on) {
794                         /* set bittiming */
795                         memset(&msg, 0, sizeof(msg));
796                         msg.spec = MSG_CBTRREQ;
797                         msg.len = cpu_to_le16(4);
798                         msg.data[0] = 0x00;
799                         msg.data[1] = 0x00;
800                         msg.data[2] = btr0;
801                         msg.data[3] = btr1;
802
803                         res = ican3_send_msg(mod, &msg);
804                         if (res)
805                                 return res;
806                 }
807
808                 /* can-on/off request */
809                 memset(&msg, 0, sizeof(msg));
810                 msg.spec = on ? MSG_CONREQ : MSG_COFFREQ;
811                 msg.len = cpu_to_le16(0);
812
813                 return ican3_send_msg(mod, &msg);
814
815         } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) {
816                 /* bittiming + can-on/off request */
817                 memset(&msg, 0, sizeof(msg));
818                 msg.spec = MSG_LMTS;
819                 if (on) {
820                         msg.len = cpu_to_le16(4);
821                         msg.data[0] = LMTS_BUSON_REQ;
822                         msg.data[1] = 0;
823                         msg.data[2] = btr0;
824                         msg.data[3] = btr1;
825                 } else {
826                         msg.len = cpu_to_le16(2);
827                         msg.data[0] = LMTS_BUSOFF_REQ;
828                         msg.data[1] = 0;
829                 }
830                 res = ican3_send_msg(mod, &msg);
831                 if (res)
832                         return res;
833
834                 if (on) {
835                         /* create NMT Slave Node for error processing
836                          *   class 2 (with error capability, see CiA/DS203-1)
837                          *   id    1
838                          *   name  locnod1 (must be exactly 7 bytes)
839                          */
840                         memset(&msg, 0, sizeof(msg));
841                         msg.spec = MSG_NMTS;
842                         msg.len = cpu_to_le16(11);
843                         msg.data[0] = NMTS_CREATE_NODE_REQ;
844                         msg.data[1] = 0;
845                         msg.data[2] = 2;                 /* node class */
846                         msg.data[3] = 1;                 /* node id */
847                         strcpy(msg.data + 4, "locnod1"); /* node name  */
848                         return ican3_send_msg(mod, &msg);
849                 }
850                 return 0;
851         }
852         return -ENOTSUPP;
853 }
854
855 static int ican3_set_termination(struct ican3_dev *mod, bool on)
856 {
857         struct ican3_msg msg;
858
859         memset(&msg, 0, sizeof(msg));
860         msg.spec = MSG_HWCONF;
861         msg.len = cpu_to_le16(2);
862         msg.data[0] = 0x00;
863         msg.data[1] = on ? HWCONF_TERMINATE_ON : HWCONF_TERMINATE_OFF;
864
865         return ican3_send_msg(mod, &msg);
866 }
867
868 static int ican3_send_inquiry(struct ican3_dev *mod, u8 subspec)
869 {
870         struct ican3_msg msg;
871
872         memset(&msg, 0, sizeof(msg));
873         msg.spec = MSG_INQUIRY;
874         msg.len = cpu_to_le16(2);
875         msg.data[0] = subspec;
876         msg.data[1] = 0x00;
877
878         return ican3_send_msg(mod, &msg);
879 }
880
881 static int ican3_set_buserror(struct ican3_dev *mod, u8 quota)
882 {
883         struct ican3_msg msg;
884
885         if (mod->fwtype == ICAN3_FWTYPE_ICANOS) {
886                 memset(&msg, 0, sizeof(msg));
887                 msg.spec = MSG_CCONFREQ;
888                 msg.len = cpu_to_le16(2);
889                 msg.data[0] = 0x00;
890                 msg.data[1] = quota;
891         } else if (mod->fwtype == ICAN3_FWTYPE_CAL_CANOPEN) {
892                 memset(&msg, 0, sizeof(msg));
893                 msg.spec = MSG_LMTS;
894                 msg.len = cpu_to_le16(4);
895                 msg.data[0] = LMTS_CAN_CONF_REQ;
896                 msg.data[1] = 0x00;
897                 msg.data[2] = 0x00;
898                 msg.data[3] = quota;
899         } else {
900                 return -ENOTSUPP;
901         }
902         return ican3_send_msg(mod, &msg);
903 }
904
905 /*
906  * ICAN3 to Linux CAN Frame Conversion
907  */
908
909 static void ican3_to_can_frame(struct ican3_dev *mod,
910                                struct ican3_fast_desc *desc,
911                                struct can_frame *cf)
912 {
913         if ((desc->command & ICAN3_CAN_TYPE_MASK) == ICAN3_CAN_TYPE_SFF) {
914                 if (desc->data[1] & ICAN3_SFF_RTR)
915                         cf->can_id |= CAN_RTR_FLAG;
916
917                 cf->can_id |= desc->data[0] << 3;
918                 cf->can_id |= (desc->data[1] & 0xe0) >> 5;
919                 cf->can_dlc = get_can_dlc(desc->data[1] & ICAN3_CAN_DLC_MASK);
920                 memcpy(cf->data, &desc->data[2], cf->can_dlc);
921         } else {
922                 cf->can_dlc = get_can_dlc(desc->data[0] & ICAN3_CAN_DLC_MASK);
923                 if (desc->data[0] & ICAN3_EFF_RTR)
924                         cf->can_id |= CAN_RTR_FLAG;
925
926                 if (desc->data[0] & ICAN3_EFF) {
927                         cf->can_id |= CAN_EFF_FLAG;
928                         cf->can_id |= desc->data[2] << 21; /* 28-21 */
929                         cf->can_id |= desc->data[3] << 13; /* 20-13 */
930                         cf->can_id |= desc->data[4] << 5;  /* 12-5  */
931                         cf->can_id |= (desc->data[5] & 0xf8) >> 3;
932                 } else {
933                         cf->can_id |= desc->data[2] << 3;  /* 10-3  */
934                         cf->can_id |= desc->data[3] >> 5;  /* 2-0   */
935                 }
936
937                 memcpy(cf->data, &desc->data[6], cf->can_dlc);
938         }
939 }
940
941 static void can_frame_to_ican3(struct ican3_dev *mod,
942                                struct can_frame *cf,
943                                struct ican3_fast_desc *desc)
944 {
945         /* clear out any stale data in the descriptor */
946         memset(desc->data, 0, sizeof(desc->data));
947
948         /* we always use the extended format, with the ECHO flag set */
949         desc->command = ICAN3_CAN_TYPE_EFF;
950         desc->data[0] |= cf->can_dlc;
951         desc->data[1] |= ICAN3_ECHO;
952
953         /* support single transmission (no retries) mode */
954         if (mod->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
955                 desc->data[1] |= ICAN3_SNGL;
956
957         if (cf->can_id & CAN_RTR_FLAG)
958                 desc->data[0] |= ICAN3_EFF_RTR;
959
960         /* pack the id into the correct places */
961         if (cf->can_id & CAN_EFF_FLAG) {
962                 desc->data[0] |= ICAN3_EFF;
963                 desc->data[2] = (cf->can_id & 0x1fe00000) >> 21; /* 28-21 */
964                 desc->data[3] = (cf->can_id & 0x001fe000) >> 13; /* 20-13 */
965                 desc->data[4] = (cf->can_id & 0x00001fe0) >> 5;  /* 12-5  */
966                 desc->data[5] = (cf->can_id & 0x0000001f) << 3;  /* 4-0   */
967         } else {
968                 desc->data[2] = (cf->can_id & 0x7F8) >> 3; /* bits 10-3 */
969                 desc->data[3] = (cf->can_id & 0x007) << 5; /* bits 2-0  */
970         }
971
972         /* copy the data bits into the descriptor */
973         memcpy(&desc->data[6], cf->data, cf->can_dlc);
974 }
975
976 /*
977  * Interrupt Handling
978  */
979
980 /*
981  * Handle an ID + Version message response from the firmware. We never generate
982  * this message in production code, but it is very useful when debugging to be
983  * able to display this message.
984  */
985 static void ican3_handle_idvers(struct ican3_dev *mod, struct ican3_msg *msg)
986 {
987         netdev_dbg(mod->ndev, "IDVERS response: %s\n", msg->data);
988 }
989
990 static void ican3_handle_msglost(struct ican3_dev *mod, struct ican3_msg *msg)
991 {
992         struct net_device *dev = mod->ndev;
993         struct net_device_stats *stats = &dev->stats;
994         struct can_frame *cf;
995         struct sk_buff *skb;
996
997         /*
998          * Report that communication messages with the microcontroller firmware
999          * are being lost. These are never CAN frames, so we do not generate an
1000          * error frame for userspace
1001          */
1002         if (msg->spec == MSG_MSGLOST) {
1003                 netdev_err(mod->ndev, "lost %d control messages\n", msg->data[0]);
1004                 return;
1005         }
1006
1007         /*
1008          * Oops, this indicates that we have lost messages in the fast queue,
1009          * which are exclusively CAN messages. Our driver isn't reading CAN
1010          * frames fast enough.
1011          *
1012          * We'll pretend that the SJA1000 told us that it ran out of buffer
1013          * space, because there is not a better message for this.
1014          */
1015         skb = alloc_can_err_skb(dev, &cf);
1016         if (skb) {
1017                 cf->can_id |= CAN_ERR_CRTL;
1018                 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
1019                 stats->rx_over_errors++;
1020                 stats->rx_errors++;
1021                 netif_rx(skb);
1022         }
1023 }
1024
1025 /*
1026  * Handle CAN Event Indication Messages from the firmware
1027  *
1028  * The ICAN3 firmware provides the values of some SJA1000 registers when it
1029  * generates this message. The code below is largely copied from the
1030  * drivers/net/can/sja1000/sja1000.c file, and adapted as necessary
1031  */
1032 static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
1033 {
1034         struct net_device *dev = mod->ndev;
1035         struct net_device_stats *stats = &dev->stats;
1036         enum can_state state = mod->can.state;
1037         u8 isrc, ecc, status, rxerr, txerr;
1038         struct can_frame *cf;
1039         struct sk_buff *skb;
1040
1041         /* we can only handle the SJA1000 part */
1042         if (msg->data[1] != CEVTIND_CHIP_SJA1000) {
1043                 netdev_err(mod->ndev, "unable to handle errors on non-SJA1000\n");
1044                 return -ENODEV;
1045         }
1046
1047         /* check the message length for sanity */
1048         if (le16_to_cpu(msg->len) < 6) {
1049                 netdev_err(mod->ndev, "error message too short\n");
1050                 return -EINVAL;
1051         }
1052
1053         isrc = msg->data[0];
1054         ecc = msg->data[2];
1055         status = msg->data[3];
1056         rxerr = msg->data[4];
1057         txerr = msg->data[5];
1058
1059         /*
1060          * This hardware lacks any support other than bus error messages to
1061          * determine if packet transmission has failed.
1062          *
1063          * When TX errors happen, one echo skb needs to be dropped from the
1064          * front of the queue.
1065          *
1066          * A small bit of code is duplicated here and below, to avoid error
1067          * skb allocation when it will just be freed immediately.
1068          */
1069         if (isrc == CEVTIND_BEI) {
1070                 int ret;
1071                 netdev_dbg(mod->ndev, "bus error interrupt\n");
1072
1073                 /* TX error */
1074                 if (!(ecc & ECC_DIR)) {
1075                         kfree_skb(skb_dequeue(&mod->echoq));
1076                         stats->tx_errors++;
1077                 } else {
1078                         stats->rx_errors++;
1079                 }
1080
1081                 /*
1082                  * The controller automatically disables bus-error interrupts
1083                  * and therefore we must re-enable them.
1084                  */
1085                 ret = ican3_set_buserror(mod, 1);
1086                 if (ret) {
1087                         netdev_err(mod->ndev, "unable to re-enable bus-error\n");
1088                         return ret;
1089                 }
1090
1091                 /* bus error reporting is off, return immediately */
1092                 if (!(mod->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING))
1093                         return 0;
1094         }
1095
1096         skb = alloc_can_err_skb(dev, &cf);
1097         if (skb == NULL)
1098                 return -ENOMEM;
1099
1100         /* data overrun interrupt */
1101         if (isrc == CEVTIND_DOI || isrc == CEVTIND_LOST) {
1102                 netdev_dbg(mod->ndev, "data overrun interrupt\n");
1103                 cf->can_id |= CAN_ERR_CRTL;
1104                 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
1105                 stats->rx_over_errors++;
1106                 stats->rx_errors++;
1107         }
1108
1109         /* error warning + passive interrupt */
1110         if (isrc == CEVTIND_EI) {
1111                 netdev_dbg(mod->ndev, "error warning + passive interrupt\n");
1112                 if (status & SR_BS) {
1113                         state = CAN_STATE_BUS_OFF;
1114                         cf->can_id |= CAN_ERR_BUSOFF;
1115                         mod->can.can_stats.bus_off++;
1116                         can_bus_off(dev);
1117                 } else if (status & SR_ES) {
1118                         if (rxerr >= 128 || txerr >= 128)
1119                                 state = CAN_STATE_ERROR_PASSIVE;
1120                         else
1121                                 state = CAN_STATE_ERROR_WARNING;
1122                 } else {
1123                         state = CAN_STATE_ERROR_ACTIVE;
1124                 }
1125         }
1126
1127         /* bus error interrupt */
1128         if (isrc == CEVTIND_BEI) {
1129                 mod->can.can_stats.bus_error++;
1130                 cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
1131
1132                 switch (ecc & ECC_MASK) {
1133                 case ECC_BIT:
1134                         cf->data[2] |= CAN_ERR_PROT_BIT;
1135                         break;
1136                 case ECC_FORM:
1137                         cf->data[2] |= CAN_ERR_PROT_FORM;
1138                         break;
1139                 case ECC_STUFF:
1140                         cf->data[2] |= CAN_ERR_PROT_STUFF;
1141                         break;
1142                 default:
1143                         cf->data[3] = ecc & ECC_SEG;
1144                         break;
1145                 }
1146
1147                 if (!(ecc & ECC_DIR))
1148                         cf->data[2] |= CAN_ERR_PROT_TX;
1149
1150                 cf->data[6] = txerr;
1151                 cf->data[7] = rxerr;
1152         }
1153
1154         if (state != mod->can.state && (state == CAN_STATE_ERROR_WARNING ||
1155                                         state == CAN_STATE_ERROR_PASSIVE)) {
1156                 cf->can_id |= CAN_ERR_CRTL;
1157                 if (state == CAN_STATE_ERROR_WARNING) {
1158                         mod->can.can_stats.error_warning++;
1159                         cf->data[1] = (txerr > rxerr) ?
1160                                 CAN_ERR_CRTL_TX_WARNING :
1161                                 CAN_ERR_CRTL_RX_WARNING;
1162                 } else {
1163                         mod->can.can_stats.error_passive++;
1164                         cf->data[1] = (txerr > rxerr) ?
1165                                 CAN_ERR_CRTL_TX_PASSIVE :
1166                                 CAN_ERR_CRTL_RX_PASSIVE;
1167                 }
1168
1169                 cf->data[6] = txerr;
1170                 cf->data[7] = rxerr;
1171         }
1172
1173         mod->can.state = state;
1174         netif_rx(skb);
1175         return 0;
1176 }
1177
1178 static void ican3_handle_inquiry(struct ican3_dev *mod, struct ican3_msg *msg)
1179 {
1180         switch (msg->data[0]) {
1181         case INQUIRY_STATUS:
1182         case INQUIRY_EXTENDED:
1183                 mod->bec.rxerr = msg->data[5];
1184                 mod->bec.txerr = msg->data[6];
1185                 complete(&mod->buserror_comp);
1186                 break;
1187         case INQUIRY_TERMINATION:
1188                 mod->termination_enabled = msg->data[6] & HWCONF_TERMINATE_ON;
1189                 complete(&mod->termination_comp);
1190                 break;
1191         default:
1192                 netdev_err(mod->ndev, "received an unknown inquiry response\n");
1193                 break;
1194         }
1195 }
1196
1197 /* Handle NMTS Slave Event Indication Messages from the firmware */
1198 static void ican3_handle_nmtsind(struct ican3_dev *mod, struct ican3_msg *msg)
1199 {
1200         u16 subspec;
1201
1202         subspec = msg->data[0] + msg->data[1] * 0x100;
1203         if (subspec == NMTS_SLAVE_EVENT_IND) {
1204                 switch (msg->data[2]) {
1205                 case NE_LOCAL_OCCURRED:
1206                 case NE_LOCAL_RESOLVED:
1207                         /* now follows the same message as Raw ICANOS CEVTIND
1208                          * shift the data at the same place and call this method
1209                          */
1210                         le16_add_cpu(&msg->len, -3);
1211                         memmove(msg->data, msg->data + 3, le16_to_cpu(msg->len));
1212                         ican3_handle_cevtind(mod, msg);
1213                         break;
1214                 case NE_REMOTE_OCCURRED:
1215                 case NE_REMOTE_RESOLVED:
1216                         /* should not occurre, ignore */
1217                         break;
1218                 default:
1219                         netdev_warn(mod->ndev, "unknown NMTS event indication %x\n",
1220                                     msg->data[2]);
1221                         break;
1222                 }
1223         } else if (subspec == NMTS_SLAVE_STATE_IND) {
1224                 /* ignore state indications */
1225         } else {
1226                 netdev_warn(mod->ndev, "unhandled NMTS indication %x\n",
1227                             subspec);
1228                 return;
1229         }
1230 }
1231
1232 static void ican3_handle_unknown_message(struct ican3_dev *mod,
1233                                         struct ican3_msg *msg)
1234 {
1235         netdev_warn(mod->ndev, "received unknown message: spec 0x%.2x length %d\n",
1236                            msg->spec, le16_to_cpu(msg->len));
1237 }
1238
1239 /*
1240  * Handle a control message from the firmware
1241  */
1242 static void ican3_handle_message(struct ican3_dev *mod, struct ican3_msg *msg)
1243 {
1244         netdev_dbg(mod->ndev, "%s: modno %d spec 0x%.2x len %d bytes\n", __func__,
1245                            mod->num, msg->spec, le16_to_cpu(msg->len));
1246
1247         switch (msg->spec) {
1248         case MSG_IDVERS:
1249                 ican3_handle_idvers(mod, msg);
1250                 break;
1251         case MSG_MSGLOST:
1252         case MSG_FMSGLOST:
1253                 ican3_handle_msglost(mod, msg);
1254                 break;
1255         case MSG_CEVTIND:
1256                 ican3_handle_cevtind(mod, msg);
1257                 break;
1258         case MSG_INQUIRY:
1259                 ican3_handle_inquiry(mod, msg);
1260                 break;
1261         case MSG_NMTS:
1262                 ican3_handle_nmtsind(mod, msg);
1263                 break;
1264         default:
1265                 ican3_handle_unknown_message(mod, msg);
1266                 break;
1267         }
1268 }
1269
1270 /*
1271  * The ican3 needs to store all echo skbs, and therefore cannot
1272  * use the generic infrastructure for this.
1273  */
1274 static void ican3_put_echo_skb(struct ican3_dev *mod, struct sk_buff *skb)
1275 {
1276         skb = can_create_echo_skb(skb);
1277         if (!skb)
1278                 return;
1279
1280         /* save this skb for tx interrupt echo handling */
1281         skb_queue_tail(&mod->echoq, skb);
1282 }
1283
1284 static unsigned int ican3_get_echo_skb(struct ican3_dev *mod)
1285 {
1286         struct sk_buff *skb = skb_dequeue(&mod->echoq);
1287         struct can_frame *cf;
1288         u8 dlc;
1289
1290         /* this should never trigger unless there is a driver bug */
1291         if (!skb) {
1292                 netdev_err(mod->ndev, "BUG: echo skb not occupied\n");
1293                 return 0;
1294         }
1295
1296         cf = (struct can_frame *)skb->data;
1297         dlc = cf->can_dlc;
1298
1299         /* check flag whether this packet has to be looped back */
1300         if (skb->pkt_type != PACKET_LOOPBACK) {
1301                 kfree_skb(skb);
1302                 return dlc;
1303         }
1304
1305         skb->protocol = htons(ETH_P_CAN);
1306         skb->pkt_type = PACKET_BROADCAST;
1307         skb->ip_summed = CHECKSUM_UNNECESSARY;
1308         skb->dev = mod->ndev;
1309         netif_receive_skb(skb);
1310         return dlc;
1311 }
1312
1313 /*
1314  * Compare an skb with an existing echo skb
1315  *
1316  * This function will be used on devices which have a hardware loopback.
1317  * On these devices, this function can be used to compare a received skb
1318  * with the saved echo skbs so that the hardware echo skb can be dropped.
1319  *
1320  * Returns true if the skb's are identical, false otherwise.
1321  */
1322 static bool ican3_echo_skb_matches(struct ican3_dev *mod, struct sk_buff *skb)
1323 {
1324         struct can_frame *cf = (struct can_frame *)skb->data;
1325         struct sk_buff *echo_skb = skb_peek(&mod->echoq);
1326         struct can_frame *echo_cf;
1327
1328         if (!echo_skb)
1329                 return false;
1330
1331         echo_cf = (struct can_frame *)echo_skb->data;
1332         if (cf->can_id != echo_cf->can_id)
1333                 return false;
1334
1335         if (cf->can_dlc != echo_cf->can_dlc)
1336                 return false;
1337
1338         return memcmp(cf->data, echo_cf->data, cf->can_dlc) == 0;
1339 }
1340
1341 /*
1342  * Check that there is room in the TX ring to transmit another skb
1343  *
1344  * LOCKING: must hold mod->lock
1345  */
1346 static bool ican3_txok(struct ican3_dev *mod)
1347 {
1348         struct ican3_fast_desc __iomem *desc;
1349         u8 control;
1350
1351         /* check that we have echo queue space */
1352         if (skb_queue_len(&mod->echoq) >= ICAN3_TX_BUFFERS)
1353                 return false;
1354
1355         /* copy the control bits of the descriptor */
1356         ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16));
1357         desc = mod->dpm + ((mod->fasttx_num % 16) * sizeof(*desc));
1358         control = ioread8(&desc->control);
1359
1360         /* if the control bits are not valid, then we have no more space */
1361         if (!(control & DESC_VALID))
1362                 return false;
1363
1364         return true;
1365 }
1366
1367 /*
1368  * Receive one CAN frame from the hardware
1369  *
1370  * CONTEXT: must be called from user context
1371  */
1372 static int ican3_recv_skb(struct ican3_dev *mod)
1373 {
1374         struct net_device *ndev = mod->ndev;
1375         struct net_device_stats *stats = &ndev->stats;
1376         struct ican3_fast_desc desc;
1377         void __iomem *desc_addr;
1378         struct can_frame *cf;
1379         struct sk_buff *skb;
1380         unsigned long flags;
1381
1382         spin_lock_irqsave(&mod->lock, flags);
1383
1384         /* copy the whole descriptor */
1385         ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16));
1386         desc_addr = mod->dpm + ((mod->fastrx_num % 16) * sizeof(desc));
1387         memcpy_fromio(&desc, desc_addr, sizeof(desc));
1388
1389         spin_unlock_irqrestore(&mod->lock, flags);
1390
1391         /* check that we actually have a CAN frame */
1392         if (!(desc.control & DESC_VALID))
1393                 return -ENOBUFS;
1394
1395         /* allocate an skb */
1396         skb = alloc_can_skb(ndev, &cf);
1397         if (unlikely(skb == NULL)) {
1398                 stats->rx_dropped++;
1399                 goto err_noalloc;
1400         }
1401
1402         /* convert the ICAN3 frame into Linux CAN format */
1403         ican3_to_can_frame(mod, &desc, cf);
1404
1405         /*
1406          * If this is an ECHO frame received from the hardware loopback
1407          * feature, use the skb saved in the ECHO stack instead. This allows
1408          * the Linux CAN core to support CAN_RAW_RECV_OWN_MSGS correctly.
1409          *
1410          * Since this is a confirmation of a successfully transmitted packet
1411          * sent from this host, update the transmit statistics.
1412          *
1413          * Also, the netdevice queue needs to be allowed to send packets again.
1414          */
1415         if (ican3_echo_skb_matches(mod, skb)) {
1416                 stats->tx_packets++;
1417                 stats->tx_bytes += ican3_get_echo_skb(mod);
1418                 kfree_skb(skb);
1419                 goto err_noalloc;
1420         }
1421
1422         /* update statistics, receive the skb */
1423         stats->rx_packets++;
1424         stats->rx_bytes += cf->can_dlc;
1425         netif_receive_skb(skb);
1426
1427 err_noalloc:
1428         /* toggle the valid bit and return the descriptor to the ring */
1429         desc.control ^= DESC_VALID;
1430
1431         spin_lock_irqsave(&mod->lock, flags);
1432
1433         ican3_set_page(mod, mod->fastrx_start + (mod->fastrx_num / 16));
1434         memcpy_toio(desc_addr, &desc, 1);
1435
1436         /* update the next buffer pointer */
1437         mod->fastrx_num = (desc.control & DESC_WRAP) ? 0
1438                                                      : (mod->fastrx_num + 1);
1439
1440         /* there are still more buffers to process */
1441         spin_unlock_irqrestore(&mod->lock, flags);
1442         return 0;
1443 }
1444
1445 static int ican3_napi(struct napi_struct *napi, int budget)
1446 {
1447         struct ican3_dev *mod = container_of(napi, struct ican3_dev, napi);
1448         unsigned long flags;
1449         int received = 0;
1450         int ret;
1451
1452         /* process all communication messages */
1453         while (true) {
1454                 struct ican3_msg msg;
1455                 ret = ican3_recv_msg(mod, &msg);
1456                 if (ret)
1457                         break;
1458
1459                 ican3_handle_message(mod, &msg);
1460         }
1461
1462         /* process all CAN frames from the fast interface */
1463         while (received < budget) {
1464                 ret = ican3_recv_skb(mod);
1465                 if (ret)
1466                         break;
1467
1468                 received++;
1469         }
1470
1471         /* We have processed all packets that the adapter had, but it
1472          * was less than our budget, stop polling */
1473         if (received < budget)
1474                 napi_complete_done(napi, received);
1475
1476         spin_lock_irqsave(&mod->lock, flags);
1477
1478         /* Wake up the transmit queue if necessary */
1479         if (netif_queue_stopped(mod->ndev) && ican3_txok(mod))
1480                 netif_wake_queue(mod->ndev);
1481
1482         spin_unlock_irqrestore(&mod->lock, flags);
1483
1484         /* re-enable interrupt generation */
1485         iowrite8(1 << mod->num, &mod->ctrl->int_enable);
1486         return received;
1487 }
1488
1489 static irqreturn_t ican3_irq(int irq, void *dev_id)
1490 {
1491         struct ican3_dev *mod = dev_id;
1492         u8 stat;
1493
1494         /*
1495          * The interrupt status register on this device reports interrupts
1496          * as zeroes instead of using ones like most other devices
1497          */
1498         stat = ioread8(&mod->ctrl->int_disable) & (1 << mod->num);
1499         if (stat == (1 << mod->num))
1500                 return IRQ_NONE;
1501
1502         /* clear the MODULbus interrupt from the microcontroller */
1503         ioread8(&mod->dpmctrl->interrupt);
1504
1505         /* disable interrupt generation, schedule the NAPI poller */
1506         iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1507         napi_schedule(&mod->napi);
1508         return IRQ_HANDLED;
1509 }
1510
1511 /*
1512  * Firmware reset, startup, and shutdown
1513  */
1514
1515 /*
1516  * Reset an ICAN module to its power-on state
1517  *
1518  * CONTEXT: no network device registered
1519  */
1520 static int ican3_reset_module(struct ican3_dev *mod)
1521 {
1522         unsigned long start;
1523         u8 runold, runnew;
1524
1525         /* disable interrupts so no more work is scheduled */
1526         iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1527
1528         /* the first unallocated page in the DPM is #9 */
1529         mod->free_page = DPM_FREE_START;
1530
1531         ican3_set_page(mod, QUEUE_OLD_CONTROL);
1532         runold = ioread8(mod->dpm + TARGET_RUNNING);
1533
1534         /* reset the module */
1535         iowrite8(0x00, &mod->dpmctrl->hwreset);
1536
1537         /* wait until the module has finished resetting and is running */
1538         start = jiffies;
1539         do {
1540                 ican3_set_page(mod, QUEUE_OLD_CONTROL);
1541                 runnew = ioread8(mod->dpm + TARGET_RUNNING);
1542                 if (runnew == (runold ^ 0xff))
1543                         return 0;
1544
1545                 msleep(10);
1546         } while (time_before(jiffies, start + HZ / 2));
1547
1548         netdev_err(mod->ndev, "failed to reset CAN module\n");
1549         return -ETIMEDOUT;
1550 }
1551
1552 static void ican3_shutdown_module(struct ican3_dev *mod)
1553 {
1554         ican3_msg_disconnect(mod);
1555         ican3_reset_module(mod);
1556 }
1557
1558 /*
1559  * Startup an ICAN module, bringing it into fast mode
1560  */
1561 static int ican3_startup_module(struct ican3_dev *mod)
1562 {
1563         int ret;
1564
1565         ret = ican3_reset_module(mod);
1566         if (ret) {
1567                 netdev_err(mod->ndev, "unable to reset module\n");
1568                 return ret;
1569         }
1570
1571         /* detect firmware */
1572         memcpy_fromio(mod->fwinfo, mod->dpm + FIRMWARE_STAMP, sizeof(mod->fwinfo) - 1);
1573         if (strncmp(mod->fwinfo, "JANZ-ICAN3", 10)) {
1574                 netdev_err(mod->ndev, "ICAN3 not detected (found %s)\n", mod->fwinfo);
1575                 return -ENODEV;
1576         }
1577         if (strstr(mod->fwinfo, "CAL/CANopen"))
1578                 mod->fwtype = ICAN3_FWTYPE_CAL_CANOPEN;
1579         else
1580                 mod->fwtype = ICAN3_FWTYPE_ICANOS;
1581
1582         /* re-enable interrupts so we can send messages */
1583         iowrite8(1 << mod->num, &mod->ctrl->int_enable);
1584
1585         ret = ican3_msg_connect(mod);
1586         if (ret) {
1587                 netdev_err(mod->ndev, "unable to connect to module\n");
1588                 return ret;
1589         }
1590
1591         ican3_init_new_host_interface(mod);
1592         ret = ican3_msg_newhostif(mod);
1593         if (ret) {
1594                 netdev_err(mod->ndev, "unable to switch to new-style interface\n");
1595                 return ret;
1596         }
1597
1598         /* default to "termination on" */
1599         ret = ican3_set_termination(mod, true);
1600         if (ret) {
1601                 netdev_err(mod->ndev, "unable to enable termination\n");
1602                 return ret;
1603         }
1604
1605         /* default to "bus errors enabled" */
1606         ret = ican3_set_buserror(mod, 1);
1607         if (ret) {
1608                 netdev_err(mod->ndev, "unable to set bus-error\n");
1609                 return ret;
1610         }
1611
1612         ican3_init_fast_host_interface(mod);
1613         ret = ican3_msg_fasthostif(mod);
1614         if (ret) {
1615                 netdev_err(mod->ndev, "unable to switch to fast host interface\n");
1616                 return ret;
1617         }
1618
1619         ret = ican3_set_id_filter(mod, true);
1620         if (ret) {
1621                 netdev_err(mod->ndev, "unable to set acceptance filter\n");
1622                 return ret;
1623         }
1624
1625         return 0;
1626 }
1627
1628 /*
1629  * CAN Network Device
1630  */
1631
1632 static int ican3_open(struct net_device *ndev)
1633 {
1634         struct ican3_dev *mod = netdev_priv(ndev);
1635         int ret;
1636
1637         /* open the CAN layer */
1638         ret = open_candev(ndev);
1639         if (ret) {
1640                 netdev_err(mod->ndev, "unable to start CAN layer\n");
1641                 return ret;
1642         }
1643
1644         /* bring the bus online */
1645         ret = ican3_set_bus_state(mod, true);
1646         if (ret) {
1647                 netdev_err(mod->ndev, "unable to set bus-on\n");
1648                 close_candev(ndev);
1649                 return ret;
1650         }
1651
1652         /* start up the network device */
1653         mod->can.state = CAN_STATE_ERROR_ACTIVE;
1654         netif_start_queue(ndev);
1655
1656         return 0;
1657 }
1658
1659 static int ican3_stop(struct net_device *ndev)
1660 {
1661         struct ican3_dev *mod = netdev_priv(ndev);
1662         int ret;
1663
1664         /* stop the network device xmit routine */
1665         netif_stop_queue(ndev);
1666         mod->can.state = CAN_STATE_STOPPED;
1667
1668         /* bring the bus offline, stop receiving packets */
1669         ret = ican3_set_bus_state(mod, false);
1670         if (ret) {
1671                 netdev_err(mod->ndev, "unable to set bus-off\n");
1672                 return ret;
1673         }
1674
1675         /* drop all outstanding echo skbs */
1676         skb_queue_purge(&mod->echoq);
1677
1678         /* close the CAN layer */
1679         close_candev(ndev);
1680         return 0;
1681 }
1682
1683 static netdev_tx_t ican3_xmit(struct sk_buff *skb, struct net_device *ndev)
1684 {
1685         struct ican3_dev *mod = netdev_priv(ndev);
1686         struct can_frame *cf = (struct can_frame *)skb->data;
1687         struct ican3_fast_desc desc;
1688         void __iomem *desc_addr;
1689         unsigned long flags;
1690
1691         if (can_dropped_invalid_skb(ndev, skb))
1692                 return NETDEV_TX_OK;
1693
1694         spin_lock_irqsave(&mod->lock, flags);
1695
1696         /* check that we can actually transmit */
1697         if (!ican3_txok(mod)) {
1698                 netdev_err(mod->ndev, "BUG: no free descriptors\n");
1699                 spin_unlock_irqrestore(&mod->lock, flags);
1700                 return NETDEV_TX_BUSY;
1701         }
1702
1703         /* copy the control bits of the descriptor */
1704         ican3_set_page(mod, mod->fasttx_start + (mod->fasttx_num / 16));
1705         desc_addr = mod->dpm + ((mod->fasttx_num % 16) * sizeof(desc));
1706         memset(&desc, 0, sizeof(desc));
1707         memcpy_fromio(&desc, desc_addr, 1);
1708
1709         /* convert the Linux CAN frame into ICAN3 format */
1710         can_frame_to_ican3(mod, cf, &desc);
1711
1712         /*
1713          * This hardware doesn't have TX-done notifications, so we'll try and
1714          * emulate it the best we can using ECHO skbs. Add the skb to the ECHO
1715          * stack. Upon packet reception, check if the ECHO skb and received
1716          * skb match, and use that to wake the queue.
1717          */
1718         ican3_put_echo_skb(mod, skb);
1719
1720         /*
1721          * the programming manual says that you must set the IVALID bit, then
1722          * interrupt, then set the valid bit. Quite weird, but it seems to be
1723          * required for this to work
1724          */
1725         desc.control |= DESC_IVALID;
1726         memcpy_toio(desc_addr, &desc, sizeof(desc));
1727
1728         /* generate a MODULbus interrupt to the microcontroller */
1729         iowrite8(0x01, &mod->dpmctrl->interrupt);
1730
1731         desc.control ^= DESC_VALID;
1732         memcpy_toio(desc_addr, &desc, sizeof(desc));
1733
1734         /* update the next buffer pointer */
1735         mod->fasttx_num = (desc.control & DESC_WRAP) ? 0
1736                                                      : (mod->fasttx_num + 1);
1737
1738         /* if there is no free descriptor space, stop the transmit queue */
1739         if (!ican3_txok(mod))
1740                 netif_stop_queue(ndev);
1741
1742         spin_unlock_irqrestore(&mod->lock, flags);
1743         return NETDEV_TX_OK;
1744 }
1745
1746 static const struct net_device_ops ican3_netdev_ops = {
1747         .ndo_open       = ican3_open,
1748         .ndo_stop       = ican3_stop,
1749         .ndo_start_xmit = ican3_xmit,
1750         .ndo_change_mtu = can_change_mtu,
1751 };
1752
1753 /*
1754  * Low-level CAN Device
1755  */
1756
1757 /* This structure was stolen from drivers/net/can/sja1000/sja1000.c */
1758 static const struct can_bittiming_const ican3_bittiming_const = {
1759         .name = DRV_NAME,
1760         .tseg1_min = 1,
1761         .tseg1_max = 16,
1762         .tseg2_min = 1,
1763         .tseg2_max = 8,
1764         .sjw_max = 4,
1765         .brp_min = 1,
1766         .brp_max = 64,
1767         .brp_inc = 1,
1768 };
1769
1770 static int ican3_set_mode(struct net_device *ndev, enum can_mode mode)
1771 {
1772         struct ican3_dev *mod = netdev_priv(ndev);
1773         int ret;
1774
1775         if (mode != CAN_MODE_START)
1776                 return -ENOTSUPP;
1777
1778         /* bring the bus online */
1779         ret = ican3_set_bus_state(mod, true);
1780         if (ret) {
1781                 netdev_err(ndev, "unable to set bus-on\n");
1782                 return ret;
1783         }
1784
1785         /* start up the network device */
1786         mod->can.state = CAN_STATE_ERROR_ACTIVE;
1787
1788         if (netif_queue_stopped(ndev))
1789                 netif_wake_queue(ndev);
1790
1791         return 0;
1792 }
1793
1794 static int ican3_get_berr_counter(const struct net_device *ndev,
1795                                   struct can_berr_counter *bec)
1796 {
1797         struct ican3_dev *mod = netdev_priv(ndev);
1798         int ret;
1799
1800         ret = ican3_send_inquiry(mod, INQUIRY_STATUS);
1801         if (ret)
1802                 return ret;
1803
1804         if (!wait_for_completion_timeout(&mod->buserror_comp, HZ)) {
1805                 netdev_info(mod->ndev, "%s timed out\n", __func__);
1806                 return -ETIMEDOUT;
1807         }
1808
1809         bec->rxerr = mod->bec.rxerr;
1810         bec->txerr = mod->bec.txerr;
1811         return 0;
1812 }
1813
1814 /*
1815  * Sysfs Attributes
1816  */
1817
1818 static ssize_t ican3_sysfs_show_term(struct device *dev,
1819                                      struct device_attribute *attr,
1820                                      char *buf)
1821 {
1822         struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1823         int ret;
1824
1825         ret = ican3_send_inquiry(mod, INQUIRY_TERMINATION);
1826         if (ret)
1827                 return ret;
1828
1829         if (!wait_for_completion_timeout(&mod->termination_comp, HZ)) {
1830                 netdev_info(mod->ndev, "%s timed out\n", __func__);
1831                 return -ETIMEDOUT;
1832         }
1833
1834         return snprintf(buf, PAGE_SIZE, "%u\n", mod->termination_enabled);
1835 }
1836
1837 static ssize_t ican3_sysfs_set_term(struct device *dev,
1838                                     struct device_attribute *attr,
1839                                     const char *buf, size_t count)
1840 {
1841         struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1842         unsigned long enable;
1843         int ret;
1844
1845         if (kstrtoul(buf, 0, &enable))
1846                 return -EINVAL;
1847
1848         ret = ican3_set_termination(mod, enable);
1849         if (ret)
1850                 return ret;
1851
1852         return count;
1853 }
1854
1855 static ssize_t ican3_sysfs_show_fwinfo(struct device *dev,
1856                                        struct device_attribute *attr,
1857                                        char *buf)
1858 {
1859         struct ican3_dev *mod = netdev_priv(to_net_dev(dev));
1860
1861         return scnprintf(buf, PAGE_SIZE, "%s\n", mod->fwinfo);
1862 }
1863
1864 static DEVICE_ATTR(termination, 0644, ican3_sysfs_show_term,
1865                    ican3_sysfs_set_term);
1866 static DEVICE_ATTR(fwinfo, 0444, ican3_sysfs_show_fwinfo, NULL);
1867
1868 static struct attribute *ican3_sysfs_attrs[] = {
1869         &dev_attr_termination.attr,
1870         &dev_attr_fwinfo.attr,
1871         NULL,
1872 };
1873
1874 static const struct attribute_group ican3_sysfs_attr_group = {
1875         .attrs = ican3_sysfs_attrs,
1876 };
1877
1878 /*
1879  * PCI Subsystem
1880  */
1881
1882 static int ican3_probe(struct platform_device *pdev)
1883 {
1884         struct janz_platform_data *pdata;
1885         struct net_device *ndev;
1886         struct ican3_dev *mod;
1887         struct resource *res;
1888         struct device *dev;
1889         int ret;
1890
1891         pdata = dev_get_platdata(&pdev->dev);
1892         if (!pdata)
1893                 return -ENXIO;
1894
1895         dev_dbg(&pdev->dev, "probe: module number %d\n", pdata->modno);
1896
1897         /* save the struct device for printing */
1898         dev = &pdev->dev;
1899
1900         /* allocate the CAN device and private data */
1901         ndev = alloc_candev(sizeof(*mod), 0);
1902         if (!ndev) {
1903                 dev_err(dev, "unable to allocate CANdev\n");
1904                 ret = -ENOMEM;
1905                 goto out_return;
1906         }
1907
1908         platform_set_drvdata(pdev, ndev);
1909         mod = netdev_priv(ndev);
1910         mod->ndev = ndev;
1911         mod->num = pdata->modno;
1912         netif_napi_add(ndev, &mod->napi, ican3_napi, ICAN3_RX_BUFFERS);
1913         skb_queue_head_init(&mod->echoq);
1914         spin_lock_init(&mod->lock);
1915         init_completion(&mod->termination_comp);
1916         init_completion(&mod->buserror_comp);
1917
1918         /* setup device-specific sysfs attributes */
1919         ndev->sysfs_groups[0] = &ican3_sysfs_attr_group;
1920
1921         /* the first unallocated page in the DPM is 9 */
1922         mod->free_page = DPM_FREE_START;
1923
1924         ndev->netdev_ops = &ican3_netdev_ops;
1925         ndev->flags |= IFF_ECHO;
1926         SET_NETDEV_DEV(ndev, &pdev->dev);
1927
1928         mod->can.clock.freq = ICAN3_CAN_CLOCK;
1929         mod->can.bittiming_const = &ican3_bittiming_const;
1930         mod->can.do_set_mode = ican3_set_mode;
1931         mod->can.do_get_berr_counter = ican3_get_berr_counter;
1932         mod->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES
1933                                     | CAN_CTRLMODE_BERR_REPORTING
1934                                     | CAN_CTRLMODE_ONE_SHOT;
1935
1936         /* find our IRQ number */
1937         mod->irq = platform_get_irq(pdev, 0);
1938         if (mod->irq < 0) {
1939                 ret = -ENODEV;
1940                 goto out_free_ndev;
1941         }
1942
1943         ndev->irq = mod->irq;
1944
1945         /* get access to the MODULbus registers for this module */
1946         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1947         if (!res) {
1948                 dev_err(dev, "MODULbus registers not found\n");
1949                 ret = -ENODEV;
1950                 goto out_free_ndev;
1951         }
1952
1953         mod->dpm = ioremap(res->start, resource_size(res));
1954         if (!mod->dpm) {
1955                 dev_err(dev, "MODULbus registers not ioremap\n");
1956                 ret = -ENOMEM;
1957                 goto out_free_ndev;
1958         }
1959
1960         mod->dpmctrl = mod->dpm + DPM_PAGE_SIZE;
1961
1962         /* get access to the control registers for this module */
1963         res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1964         if (!res) {
1965                 dev_err(dev, "CONTROL registers not found\n");
1966                 ret = -ENODEV;
1967                 goto out_iounmap_dpm;
1968         }
1969
1970         mod->ctrl = ioremap(res->start, resource_size(res));
1971         if (!mod->ctrl) {
1972                 dev_err(dev, "CONTROL registers not ioremap\n");
1973                 ret = -ENOMEM;
1974                 goto out_iounmap_dpm;
1975         }
1976
1977         /* disable our IRQ, then hookup the IRQ handler */
1978         iowrite8(1 << mod->num, &mod->ctrl->int_disable);
1979         ret = request_irq(mod->irq, ican3_irq, IRQF_SHARED, DRV_NAME, mod);
1980         if (ret) {
1981                 dev_err(dev, "unable to request IRQ\n");
1982                 goto out_iounmap_ctrl;
1983         }
1984
1985         /* reset and initialize the CAN controller into fast mode */
1986         napi_enable(&mod->napi);
1987         ret = ican3_startup_module(mod);
1988         if (ret) {
1989                 dev_err(dev, "%s: unable to start CANdev\n", __func__);
1990                 goto out_free_irq;
1991         }
1992
1993         /* register with the Linux CAN layer */
1994         ret = register_candev(ndev);
1995         if (ret) {
1996                 dev_err(dev, "%s: unable to register CANdev\n", __func__);
1997                 goto out_free_irq;
1998         }
1999
2000         netdev_info(mod->ndev, "module %d: registered CAN device\n", pdata->modno);
2001         return 0;
2002
2003 out_free_irq:
2004         napi_disable(&mod->napi);
2005         iowrite8(1 << mod->num, &mod->ctrl->int_disable);
2006         free_irq(mod->irq, mod);
2007 out_iounmap_ctrl:
2008         iounmap(mod->ctrl);
2009 out_iounmap_dpm:
2010         iounmap(mod->dpm);
2011 out_free_ndev:
2012         free_candev(ndev);
2013 out_return:
2014         return ret;
2015 }
2016
2017 static int ican3_remove(struct platform_device *pdev)
2018 {
2019         struct net_device *ndev = platform_get_drvdata(pdev);
2020         struct ican3_dev *mod = netdev_priv(ndev);
2021
2022         /* unregister the netdevice, stop interrupts */
2023         unregister_netdev(ndev);
2024         napi_disable(&mod->napi);
2025         iowrite8(1 << mod->num, &mod->ctrl->int_disable);
2026         free_irq(mod->irq, mod);
2027
2028         /* put the module into reset */
2029         ican3_shutdown_module(mod);
2030
2031         /* unmap all registers */
2032         iounmap(mod->ctrl);
2033         iounmap(mod->dpm);
2034
2035         free_candev(ndev);
2036
2037         return 0;
2038 }
2039
2040 static struct platform_driver ican3_driver = {
2041         .driver         = {
2042                 .name   = DRV_NAME,
2043         },
2044         .probe          = ican3_probe,
2045         .remove         = ican3_remove,
2046 };
2047
2048 module_platform_driver(ican3_driver);
2049
2050 MODULE_AUTHOR("Ira W. Snyder <iws@ovro.caltech.edu>");
2051 MODULE_DESCRIPTION("Janz MODULbus VMOD-ICAN3 Driver");
2052 MODULE_LICENSE("GPL");
2053 MODULE_ALIAS("platform:janz-ican3");