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