6 * - Sascha Hauer, Marc Kleine-Budde, Pengutronix
7 * - Simon Kallweit, intefo AG
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the version 2 of the GNU General Public License
11 * as published by the Free Software Foundation
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #ifdef CONFIG_CAN_DEBUG_DEVICES
24 #define DBG(args...) printk(args)
29 #include <linux/kernel.h>
30 #include <linux/version.h>
31 #include <linux/module.h>
32 #include <linux/interrupt.h>
33 #include <linux/delay.h>
34 #include <linux/netdevice.h>
35 #include <linux/if_arp.h>
36 #include <linux/if_ether.h>
37 #include <linux/can.h>
38 #include <linux/list.h>
39 #include <linux/delay.h>
40 #include <linux/workqueue.h>
41 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
47 #include <linux/can/dev.h>
48 #include <linux/can/error.h>
51 static u32 ccan_read_reg32(struct net_device *dev, enum c_regs reg)
53 struct ccan_priv *priv = netdev_priv(dev);
55 u32 val = priv->read_reg(dev, reg);
56 val |= ((u32) priv->read_reg(dev, reg + 2)) << 16;
61 static void ccan_write_reg32(struct net_device *dev, enum c_regs reg, u32 val)
63 struct ccan_priv *priv = netdev_priv(dev);
65 priv->write_reg(dev, reg, val & 0xffff);
66 priv->write_reg(dev, reg + 2, val >> 16);
69 static inline void ccan_object_get(struct net_device *dev,
70 int iface, int objno, int mask)
72 struct ccan_priv *priv = netdev_priv(dev);
74 priv->write_reg(dev, CAN_IF_COMM(iface), mask);
75 priv->write_reg(dev, CAN_IF_COMR(iface), objno + 1);
76 while (priv->read_reg(dev, CAN_IF_COMR(iface)) & IF_COMR_BUSY)
80 static inline void ccan_object_put(struct net_device *dev,
81 int iface, int objno, int mask)
83 struct ccan_priv *priv = netdev_priv(dev);
85 priv->write_reg(dev, CAN_IF_COMM(iface), IF_COMM_WR | mask);
86 priv->write_reg(dev, CAN_IF_COMR(iface), objno + 1);
87 while (priv->read_reg(dev, CAN_IF_COMR(iface)) & IF_COMR_BUSY)
91 static int ccan_write_object(struct net_device *dev,
92 int iface, struct can_frame *frame, int objno)
94 struct ccan_priv *priv = netdev_priv(dev);
97 if (frame->can_id & CAN_EFF_FLAG)
98 val = IF_ARB_MSGXTD | (frame->can_id & CAN_EFF_MASK);
100 val = ((frame->can_id & CAN_SFF_MASK) << 18);
102 if (!(frame->can_id & CAN_RTR_FLAG))
103 val |= IF_ARB_TRANSMIT;
105 val |= IF_ARB_MSGVAL;
106 ccan_write_reg32(dev, CAN_IF_ARB(iface), val);
108 memcpy(&val, &frame->data[0], 4);
109 ccan_write_reg32(dev, CAN_IF_DATAA(iface), val);
110 memcpy(&val, &frame->data[4], 4);
111 ccan_write_reg32(dev, CAN_IF_DATAB(iface), val);
112 priv->write_reg(dev, CAN_IF_MCONT(iface),
113 IF_MCONT_TXIE | IF_MCONT_TXRQST | IF_MCONT_EOB |
114 (frame->can_dlc & 0xf));
116 ccan_object_put(dev, 0, objno, IF_COMM_ALL);
121 static int ccan_read_object(struct net_device *dev, int iface, int objno)
123 struct ccan_priv *priv = netdev_priv(dev);
124 unsigned int val, ctrl, data;
126 struct can_frame *frame;
128 skb = dev_alloc_skb(sizeof(struct can_frame));
131 ccan_object_get(dev, 0, objno, IF_COMM_ALL & ~IF_COMM_TXRQST);
133 priv->bufstat[objno]++;
135 frame = (struct can_frame *)skb_put(skb, sizeof(struct can_frame));
137 ctrl = priv->read_reg(dev, CAN_IF_MCONT(iface));
139 if (ctrl & IF_MCONT_MSGLST) {
140 priv->can.net_stats.rx_errors++;
141 DBG("%s: msg lost in buffer %d\n", __func__, objno);
144 frame->can_dlc = ctrl & 0xf;
146 val = ccan_read_reg32(dev, CAN_IF_ARB(iface));
148 data = ccan_read_reg32(dev, CAN_IF_DATAA(iface));
149 memcpy(&frame->data[0], &data, 4);
150 data = ccan_read_reg32(dev, CAN_IF_DATAB(iface));
151 memcpy(&frame->data[4], &data, 4);
153 if (val & IF_ARB_MSGXTD)
154 frame->can_id = (val & CAN_EFF_MASK) | CAN_EFF_FLAG;
156 frame->can_id = (val >> 18) & CAN_SFF_MASK;
158 if (val & IF_ARB_TRANSMIT)
159 frame->can_id |= CAN_RTR_FLAG;
161 priv->write_reg(dev, CAN_IF_MCONT(iface), ctrl &
162 ~(IF_MCONT_MSGLST | IF_MCONT_INTPND | IF_MCONT_NEWDAT));
164 ccan_object_put(dev, 0, objno, IF_COMM_CONTROL);
166 skb->protocol = __constant_htons(ETH_P_CAN);
169 priv->can.net_stats.rx_packets++;
170 priv->can.net_stats.rx_bytes += frame->can_dlc;
175 static int ccan_setup_receive_object(struct net_device *dev, int iface,
176 int objno, unsigned int mask,
177 unsigned int id, unsigned int mcont)
179 struct ccan_priv *priv = netdev_priv(dev);
181 ccan_write_reg32(dev, CAN_IF_MASK(iface), mask);
182 ccan_write_reg32(dev, CAN_IF_ARB(iface), IF_ARB_MSGVAL | id);
184 priv->write_reg(dev, CAN_IF_MCONT(iface), mcont);
186 ccan_object_put(dev, 0, objno, IF_COMM_ALL & ~IF_COMM_TXRQST);
188 DBG("%s: obj no %d msgval: 0x%08x\n", __func__,
189 objno, ccan_read_reg32(dev, CAN_MSGVAL));
194 static int ccan_inval_object(struct net_device *dev, int iface, int objno)
196 struct ccan_priv *priv = netdev_priv(dev);
198 ccan_write_reg32(dev, CAN_IF_ARB(iface), 0);
199 priv->write_reg(dev, CAN_IF_MCONT(iface), 0);
200 ccan_object_put(dev, 0, objno, IF_COMM_ARB | IF_COMM_CONTROL);
202 DBG("%s: obj no %d msgval: 0x%08x\n", __func__,
203 objno, ccan_read_reg32(dev, CAN_MSGVAL));
208 static int ccan_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
210 struct ccan_priv *priv = netdev_priv(dev);
211 struct can_frame *frame = (struct can_frame *)skb->data;
213 spin_lock_irq(&priv->can.irq_lock);
215 ccan_write_object(dev, 0, frame, priv->tx_object);
217 priv->bufstat[priv->tx_object]++;
220 if (priv->tx_object > 5)
221 netif_stop_queue(dev);
223 spin_unlock_irq(&priv->can.irq_lock);
225 priv->can.net_stats.tx_packets++;
226 priv->can.net_stats.tx_bytes += frame->can_dlc;
228 dev->trans_start = jiffies;
234 static void ccan_tx_timeout(struct net_device *dev)
236 struct ccan_priv *priv = netdev_priv(dev);
238 priv->can.net_stats.tx_errors++;
241 static int ccan_set_bittime(struct net_device *dev, struct can_bittime *br)
243 struct ccan_priv *priv = netdev_priv(dev);
244 unsigned int reg_timing, ctrl_save;
245 u8 brp, sjw, tseg1, tseg2;
247 if (br->type != CAN_BITTIME_STD)
250 brp = br->std.brp - 1;
251 sjw = br->std.sjw - 1;
252 tseg1 = br->std.prop_seg + br->std.phase_seg1 - 1;
253 tseg2 = br->std.phase_seg2 - 1;
255 reg_timing = (brp & BTR_BRP_MASK) |
256 ((sjw << BTR_SJW_SHIFT) & BTR_SJW_MASK) |
257 ((tseg1 << BTR_TSEG1_SHIFT) & BTR_TSEG1_MASK) |
258 ((tseg2 << BTR_TSEG2_SHIFT) & BTR_TSEG2_MASK);
260 DBG("%s: brp = %d sjw = %d seg1 = %d seg2 = %d\n", __func__,
261 brp, sjw, tseg1, tseg2);
262 DBG("%s: setting BTR to %04x\n", __func__, reg_timing);
264 spin_lock_irq(&priv->can.irq_lock);
266 ctrl_save = priv->read_reg(dev, CAN_CONTROL);
267 priv->write_reg(dev, CAN_CONTROL,
268 ctrl_save | CONTROL_CCE | CONTROL_INIT);
269 priv->write_reg(dev, CAN_BTR, reg_timing);
270 priv->write_reg(dev, CAN_CONTROL, ctrl_save);
272 spin_unlock_irq(&priv->can.irq_lock);
277 static int ccan_set_mode(struct net_device *dev, enum can_mode mode)
281 DBG("%s: CAN_MODE_START requested\n", __func__);
290 static int ccan_get_state(struct net_device *dev, enum can_state *state)
292 struct ccan_priv *priv = netdev_priv(dev);
298 reg_status = priv->read_reg(dev, CAN_STATUS);
300 if (reg_status & STATUS_EPASS)
301 *state = CAN_STATE_BUS_PASSIVE;
302 else if (reg_status & STATUS_EWARN)
303 *state = CAN_STATE_BUS_WARNING;
304 else if (reg_status & STATUS_BOFF)
305 *state = CAN_STATE_BUS_OFF;
307 *state = CAN_STATE_ACTIVE;
309 DBG("buffer statistic:\n");
310 for (i = 0; i <= MAX_OBJECT; i++)
311 DBG("%d: %d\n", i, priv->bufstat[i]);
316 static int ccan_do_status_irq(struct net_device *dev)
318 struct ccan_priv *priv = netdev_priv(dev);
321 status = priv->read_reg(dev, CAN_STATUS);
322 status &= ~(STATUS_TXOK | STATUS_RXOK);
323 diff = status ^ priv->last_status;
325 if (diff & STATUS_EPASS) {
326 if (status & STATUS_EPASS)
327 dev_info(ND2D(dev), "entered error passive state\n");
329 dev_info(ND2D(dev), "left error passive state\n");
331 if (diff & STATUS_EWARN) {
332 if (status & STATUS_EWARN)
333 dev_info(ND2D(dev), "entered error warning state\n");
335 dev_info(ND2D(dev), "left error warning state\n");
337 if (diff & STATUS_BOFF) {
338 if (status & STATUS_BOFF)
339 dev_info(ND2D(dev), "entered busoff state\n");
341 dev_info(ND2D(dev), "left busoff state\n");
344 if (diff & STATUS_LEC_MASK) {
345 switch (status & STATUS_LEC_MASK) {
346 case LEC_STUFF_ERROR:
347 dev_info(ND2D(dev), "suffing error\n");
350 dev_info(ND2D(dev), "form error\n");
353 dev_info(ND2D(dev), "ack error\n");
356 dev_info(ND2D(dev), "bit1 error\n");
361 priv->write_reg(dev, CAN_STATUS, 0);
362 priv->last_status = status;
367 static void ccan_do_object_irq(struct net_device *dev, u16 irqstatus)
369 struct ccan_priv *priv = netdev_priv(dev);
373 if (irqstatus > MAX_TRANSMIT_OBJECT) {
374 val = ccan_read_reg32(dev, CAN_NEWDAT);
375 while (val & RECEIVE_OBJECT_BITS) {
376 for (i = MAX_TRANSMIT_OBJECT + 1; i <= MAX_OBJECT; i++)
378 ccan_read_object(dev, 0, i);
379 val = ccan_read_reg32(dev, CAN_NEWDAT);
382 ccan_inval_object(dev, 0, irqstatus - 1);
383 val = ccan_read_reg32(dev, CAN_TXRQST);
386 netif_wake_queue(dev);
391 static void do_statuspoll(struct work_struct *work)
393 struct ccan_priv *priv = container_of(((struct delayed_work *) work),
394 struct ccan_priv, work);
396 priv->write_reg(priv->dev, CAN_CONTROL,
397 CONTROL_SIE | CONTROL_EIE | CONTROL_IE);
400 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
401 static irqreturn_t ccan_isr(int irq, void *dev_id, struct pt_regs *regs)
403 static irqreturn_t ccan_isr(int irq, void *dev_id)
406 struct net_device *dev = (struct net_device *) dev_id;
407 struct ccan_priv *priv = netdev_priv(dev);
411 spin_lock_irqsave(&priv->can.irq_lock, flags);
413 irqstatus = priv->read_reg(dev, CAN_IR);
415 if (irqstatus == 0x8000) {
416 if (ccan_do_status_irq(dev)) {
417 /* The c_can core tends to flood us with
418 * interrupts when certain error states don't
419 * disappear. Disable interrupts and see if it's
420 * getting better later. This is at least the
421 * case on the Magnachip h7202.
423 priv->write_reg(dev, CAN_CONTROL, CONTROL_EIE |
425 schedule_delayed_work(&priv->work, HZ / 10);
429 ccan_do_object_irq(dev, irqstatus);
431 irqstatus = priv->read_reg(dev, CAN_IR);
435 spin_unlock_irqrestore(&priv->can.irq_lock, flags);
440 static int ccan_open(struct net_device *dev)
442 struct ccan_priv *priv = netdev_priv(dev);
444 if (request_irq(dev->irq, &ccan_isr, 0, dev->name, dev)) {
445 dev_err(ND2D(dev), "failed to attach interrupt\n");
449 priv->write_reg(dev, CAN_CONTROL,
450 CONTROL_EIE | CONTROL_SIE | CONTROL_IE);
452 netif_wake_queue(dev);
457 static int ccan_stop(struct net_device *dev)
459 struct ccan_priv *priv = netdev_priv(dev);
462 netif_stop_queue(dev);
464 cancel_delayed_work(&priv->work);
465 flush_scheduled_work();
468 spin_lock_irqsave(&priv->can.irq_lock, flags);
469 priv->write_reg(dev, CAN_CONTROL, 0);
470 spin_unlock_irqrestore(&priv->can.irq_lock, flags);
472 free_irq(dev->irq, dev);
477 static int ccan_chip_config(struct net_device *dev)
479 struct ccan_priv *priv = netdev_priv(dev);
482 /* setup message objects */
483 for (i = 0; i <= MAX_OBJECT; i++)
484 ccan_inval_object(dev, 0, i);
486 for (i = MAX_TRANSMIT_OBJECT + 1; i < MAX_OBJECT; i++)
487 ccan_setup_receive_object(dev, 0, i, 0, 0,
488 IF_MCONT_RXIE | IF_MCONT_UMASK);
490 ccan_setup_receive_object(dev, 0, MAX_OBJECT, 0, 0, IF_MCONT_EOB |
491 IF_MCONT_RXIE | IF_MCONT_UMASK);
494 for (i = 0; i <= MAX_OBJECT; i++)
495 priv->bufstat[i] = 0;
501 struct net_device *alloc_ccandev(int sizeof_priv)
503 struct net_device *dev;
504 struct ccan_priv *priv;
506 dev = alloc_candev(sizeof_priv);
510 priv = netdev_priv(dev);
512 dev->open = ccan_open;
513 dev->stop = ccan_stop;
514 dev->hard_start_xmit = ccan_hard_start_xmit;
515 dev->tx_timeout = ccan_tx_timeout;
517 priv->can.bitrate = 500000;
519 priv->can.do_set_bittime = ccan_set_bittime;
520 priv->can.do_get_state = ccan_get_state;
521 priv->can.do_set_mode = ccan_set_mode;
528 EXPORT_SYMBOL(alloc_ccandev);
530 void free_ccandev(struct net_device *dev)
534 EXPORT_SYMBOL(free_ccandev);
536 int register_ccandev(struct net_device *dev)
538 struct ccan_priv *priv = netdev_priv(dev);
540 ccan_set_mode(dev, CAN_MODE_START);
542 ccan_chip_config(dev);
543 INIT_DELAYED_WORK(&priv->work, do_statuspoll);
545 return register_netdev(dev);
547 EXPORT_SYMBOL(register_ccandev);
549 void unregister_ccandev(struct net_device *dev)
551 struct ccan_priv *priv = netdev_priv(dev);
553 ccan_set_mode(dev, CAN_MODE_START);
555 cancel_delayed_work(&priv->work);
556 flush_scheduled_work();
558 unregister_netdev(dev);
560 EXPORT_SYMBOL(unregister_ccandev);
563 MODULE_AUTHOR("Sascha Hauer <s.hauer@pengutronix.de>");
564 MODULE_AUTHOR("Simon Kallweit <simon.kallweit@intefo.ch>");
565 MODULE_LICENSE("GPL v2");
566 MODULE_DESCRIPTION("CAN port driver for C_CAN based chips");