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