0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 #include <linux/module.h>
0046 #include <linux/init.h>
0047 #include <linux/kernel.h>
0048 #include <linux/sched.h>
0049 #include <linux/types.h>
0050 #include <linux/fcntl.h>
0051 #include <linux/interrupt.h>
0052 #include <linux/ptrace.h>
0053 #include <linux/string.h>
0054 #include <linux/errno.h>
0055 #include <linux/ethtool.h>
0056 #include <linux/netdevice.h>
0057 #include <linux/if_arp.h>
0058 #include <linux/if_ether.h>
0059 #include <linux/skbuff.h>
0060 #include <linux/delay.h>
0061
0062 #include <linux/can/dev.h>
0063 #include <linux/can/error.h>
0064
0065 #include "sja1000.h"
0066
0067 #define DRV_NAME "sja1000"
0068
0069 MODULE_AUTHOR("Oliver Hartkopp <oliver.hartkopp@volkswagen.de>");
0070 MODULE_LICENSE("Dual BSD/GPL");
0071 MODULE_DESCRIPTION(DRV_NAME "CAN netdevice driver");
0072
0073 static const struct can_bittiming_const sja1000_bittiming_const = {
0074 .name = DRV_NAME,
0075 .tseg1_min = 1,
0076 .tseg1_max = 16,
0077 .tseg2_min = 1,
0078 .tseg2_max = 8,
0079 .sjw_max = 4,
0080 .brp_min = 1,
0081 .brp_max = 64,
0082 .brp_inc = 1,
0083 };
0084
0085 static void sja1000_write_cmdreg(struct sja1000_priv *priv, u8 val)
0086 {
0087 unsigned long flags;
0088
0089
0090
0091
0092
0093 spin_lock_irqsave(&priv->cmdreg_lock, flags);
0094 priv->write_reg(priv, SJA1000_CMR, val);
0095 priv->read_reg(priv, SJA1000_SR);
0096 spin_unlock_irqrestore(&priv->cmdreg_lock, flags);
0097 }
0098
0099 static int sja1000_is_absent(struct sja1000_priv *priv)
0100 {
0101 return (priv->read_reg(priv, SJA1000_MOD) == 0xFF);
0102 }
0103
0104 static int sja1000_probe_chip(struct net_device *dev)
0105 {
0106 struct sja1000_priv *priv = netdev_priv(dev);
0107
0108 if (priv->reg_base && sja1000_is_absent(priv)) {
0109 netdev_err(dev, "probing failed\n");
0110 return 0;
0111 }
0112 return -1;
0113 }
0114
0115 static void set_reset_mode(struct net_device *dev)
0116 {
0117 struct sja1000_priv *priv = netdev_priv(dev);
0118 unsigned char status = priv->read_reg(priv, SJA1000_MOD);
0119 int i;
0120
0121
0122 priv->write_reg(priv, SJA1000_IER, IRQ_OFF);
0123
0124 for (i = 0; i < 100; i++) {
0125
0126 if (status & MOD_RM) {
0127 priv->can.state = CAN_STATE_STOPPED;
0128 return;
0129 }
0130
0131
0132 priv->write_reg(priv, SJA1000_MOD, MOD_RM);
0133 udelay(10);
0134 status = priv->read_reg(priv, SJA1000_MOD);
0135 }
0136
0137 netdev_err(dev, "setting SJA1000 into reset mode failed!\n");
0138 }
0139
0140 static void set_normal_mode(struct net_device *dev)
0141 {
0142 struct sja1000_priv *priv = netdev_priv(dev);
0143 unsigned char status = priv->read_reg(priv, SJA1000_MOD);
0144 u8 mod_reg_val = 0x00;
0145 int i;
0146
0147 for (i = 0; i < 100; i++) {
0148
0149 if ((status & MOD_RM) == 0) {
0150 priv->can.state = CAN_STATE_ERROR_ACTIVE;
0151
0152 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
0153 priv->write_reg(priv, SJA1000_IER, IRQ_ALL);
0154 else
0155 priv->write_reg(priv, SJA1000_IER,
0156 IRQ_ALL & ~IRQ_BEI);
0157 return;
0158 }
0159
0160
0161 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
0162 mod_reg_val |= MOD_LOM;
0163 if (priv->can.ctrlmode & CAN_CTRLMODE_PRESUME_ACK)
0164 mod_reg_val |= MOD_STM;
0165 priv->write_reg(priv, SJA1000_MOD, mod_reg_val);
0166
0167 udelay(10);
0168
0169 status = priv->read_reg(priv, SJA1000_MOD);
0170 }
0171
0172 netdev_err(dev, "setting SJA1000 into normal mode failed!\n");
0173 }
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183 static void chipset_init(struct net_device *dev)
0184 {
0185 struct sja1000_priv *priv = netdev_priv(dev);
0186
0187 if (!(priv->flags & SJA1000_QUIRK_NO_CDR_REG))
0188
0189 priv->write_reg(priv, SJA1000_CDR, priv->cdr | CDR_PELICAN);
0190
0191
0192 priv->write_reg(priv, SJA1000_ACCC0, 0x00);
0193 priv->write_reg(priv, SJA1000_ACCC1, 0x00);
0194 priv->write_reg(priv, SJA1000_ACCC2, 0x00);
0195 priv->write_reg(priv, SJA1000_ACCC3, 0x00);
0196
0197 priv->write_reg(priv, SJA1000_ACCM0, 0xFF);
0198 priv->write_reg(priv, SJA1000_ACCM1, 0xFF);
0199 priv->write_reg(priv, SJA1000_ACCM2, 0xFF);
0200 priv->write_reg(priv, SJA1000_ACCM3, 0xFF);
0201
0202 priv->write_reg(priv, SJA1000_OCR, priv->ocr | OCR_MODE_NORMAL);
0203 }
0204
0205 static void sja1000_start(struct net_device *dev)
0206 {
0207 struct sja1000_priv *priv = netdev_priv(dev);
0208
0209
0210 if (priv->can.state != CAN_STATE_STOPPED)
0211 set_reset_mode(dev);
0212
0213
0214 if (!(priv->flags & SJA1000_QUIRK_NO_CDR_REG ||
0215 priv->read_reg(priv, SJA1000_CDR) & CDR_PELICAN))
0216 chipset_init(dev);
0217
0218
0219 priv->write_reg(priv, SJA1000_TXERR, 0x0);
0220 priv->write_reg(priv, SJA1000_RXERR, 0x0);
0221 priv->read_reg(priv, SJA1000_ECC);
0222
0223
0224 priv->read_reg(priv, SJA1000_IR);
0225
0226
0227 set_normal_mode(dev);
0228 }
0229
0230 static int sja1000_set_mode(struct net_device *dev, enum can_mode mode)
0231 {
0232 switch (mode) {
0233 case CAN_MODE_START:
0234 sja1000_start(dev);
0235 if (netif_queue_stopped(dev))
0236 netif_wake_queue(dev);
0237 break;
0238
0239 default:
0240 return -EOPNOTSUPP;
0241 }
0242
0243 return 0;
0244 }
0245
0246 static int sja1000_set_bittiming(struct net_device *dev)
0247 {
0248 struct sja1000_priv *priv = netdev_priv(dev);
0249 struct can_bittiming *bt = &priv->can.bittiming;
0250 u8 btr0, btr1;
0251
0252 btr0 = ((bt->brp - 1) & 0x3f) | (((bt->sjw - 1) & 0x3) << 6);
0253 btr1 = ((bt->prop_seg + bt->phase_seg1 - 1) & 0xf) |
0254 (((bt->phase_seg2 - 1) & 0x7) << 4);
0255 if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
0256 btr1 |= 0x80;
0257
0258 netdev_info(dev, "setting BTR0=0x%02x BTR1=0x%02x\n", btr0, btr1);
0259
0260 priv->write_reg(priv, SJA1000_BTR0, btr0);
0261 priv->write_reg(priv, SJA1000_BTR1, btr1);
0262
0263 return 0;
0264 }
0265
0266 static int sja1000_get_berr_counter(const struct net_device *dev,
0267 struct can_berr_counter *bec)
0268 {
0269 struct sja1000_priv *priv = netdev_priv(dev);
0270
0271 bec->txerr = priv->read_reg(priv, SJA1000_TXERR);
0272 bec->rxerr = priv->read_reg(priv, SJA1000_RXERR);
0273
0274 return 0;
0275 }
0276
0277
0278
0279
0280
0281
0282
0283 static netdev_tx_t sja1000_start_xmit(struct sk_buff *skb,
0284 struct net_device *dev)
0285 {
0286 struct sja1000_priv *priv = netdev_priv(dev);
0287 struct can_frame *cf = (struct can_frame *)skb->data;
0288 uint8_t fi;
0289 canid_t id;
0290 uint8_t dreg;
0291 u8 cmd_reg_val = 0x00;
0292 int i;
0293
0294 if (can_dropped_invalid_skb(dev, skb))
0295 return NETDEV_TX_OK;
0296
0297 netif_stop_queue(dev);
0298
0299 fi = can_get_cc_dlc(cf, priv->can.ctrlmode);
0300 id = cf->can_id;
0301
0302 if (id & CAN_RTR_FLAG)
0303 fi |= SJA1000_FI_RTR;
0304
0305 if (id & CAN_EFF_FLAG) {
0306 fi |= SJA1000_FI_FF;
0307 dreg = SJA1000_EFF_BUF;
0308 priv->write_reg(priv, SJA1000_FI, fi);
0309 priv->write_reg(priv, SJA1000_ID1, (id & 0x1fe00000) >> 21);
0310 priv->write_reg(priv, SJA1000_ID2, (id & 0x001fe000) >> 13);
0311 priv->write_reg(priv, SJA1000_ID3, (id & 0x00001fe0) >> 5);
0312 priv->write_reg(priv, SJA1000_ID4, (id & 0x0000001f) << 3);
0313 } else {
0314 dreg = SJA1000_SFF_BUF;
0315 priv->write_reg(priv, SJA1000_FI, fi);
0316 priv->write_reg(priv, SJA1000_ID1, (id & 0x000007f8) >> 3);
0317 priv->write_reg(priv, SJA1000_ID2, (id & 0x00000007) << 5);
0318 }
0319
0320 for (i = 0; i < cf->len; i++)
0321 priv->write_reg(priv, dreg++, cf->data[i]);
0322
0323 can_put_echo_skb(skb, dev, 0, 0);
0324
0325 if (priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
0326 cmd_reg_val |= CMD_AT;
0327
0328 if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
0329 cmd_reg_val |= CMD_SRR;
0330 else
0331 cmd_reg_val |= CMD_TR;
0332
0333 sja1000_write_cmdreg(priv, cmd_reg_val);
0334
0335 return NETDEV_TX_OK;
0336 }
0337
0338 static void sja1000_rx(struct net_device *dev)
0339 {
0340 struct sja1000_priv *priv = netdev_priv(dev);
0341 struct net_device_stats *stats = &dev->stats;
0342 struct can_frame *cf;
0343 struct sk_buff *skb;
0344 uint8_t fi;
0345 uint8_t dreg;
0346 canid_t id;
0347 int i;
0348
0349
0350 skb = alloc_can_skb(dev, &cf);
0351 if (skb == NULL)
0352 return;
0353
0354 fi = priv->read_reg(priv, SJA1000_FI);
0355
0356 if (fi & SJA1000_FI_FF) {
0357
0358 dreg = SJA1000_EFF_BUF;
0359 id = (priv->read_reg(priv, SJA1000_ID1) << 21)
0360 | (priv->read_reg(priv, SJA1000_ID2) << 13)
0361 | (priv->read_reg(priv, SJA1000_ID3) << 5)
0362 | (priv->read_reg(priv, SJA1000_ID4) >> 3);
0363 id |= CAN_EFF_FLAG;
0364 } else {
0365
0366 dreg = SJA1000_SFF_BUF;
0367 id = (priv->read_reg(priv, SJA1000_ID1) << 3)
0368 | (priv->read_reg(priv, SJA1000_ID2) >> 5);
0369 }
0370
0371 can_frame_set_cc_len(cf, fi & 0x0F, priv->can.ctrlmode);
0372 if (fi & SJA1000_FI_RTR) {
0373 id |= CAN_RTR_FLAG;
0374 } else {
0375 for (i = 0; i < cf->len; i++)
0376 cf->data[i] = priv->read_reg(priv, dreg++);
0377
0378 stats->rx_bytes += cf->len;
0379 }
0380 stats->rx_packets++;
0381
0382 cf->can_id = id;
0383
0384
0385 sja1000_write_cmdreg(priv, CMD_RRB);
0386
0387 netif_rx(skb);
0388 }
0389
0390 static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
0391 {
0392 struct sja1000_priv *priv = netdev_priv(dev);
0393 struct net_device_stats *stats = &dev->stats;
0394 struct can_frame *cf;
0395 struct sk_buff *skb;
0396 enum can_state state = priv->can.state;
0397 enum can_state rx_state, tx_state;
0398 unsigned int rxerr, txerr;
0399 uint8_t ecc, alc;
0400
0401 skb = alloc_can_err_skb(dev, &cf);
0402 if (skb == NULL)
0403 return -ENOMEM;
0404
0405 txerr = priv->read_reg(priv, SJA1000_TXERR);
0406 rxerr = priv->read_reg(priv, SJA1000_RXERR);
0407
0408 if (isrc & IRQ_DOI) {
0409
0410 netdev_dbg(dev, "data overrun interrupt\n");
0411 cf->can_id |= CAN_ERR_CRTL;
0412 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
0413 stats->rx_over_errors++;
0414 stats->rx_errors++;
0415 sja1000_write_cmdreg(priv, CMD_CDO);
0416 }
0417
0418 if (isrc & IRQ_EI) {
0419
0420 netdev_dbg(dev, "error warning interrupt\n");
0421
0422 if (status & SR_BS)
0423 state = CAN_STATE_BUS_OFF;
0424 else if (status & SR_ES)
0425 state = CAN_STATE_ERROR_WARNING;
0426 else
0427 state = CAN_STATE_ERROR_ACTIVE;
0428 }
0429 if (state != CAN_STATE_BUS_OFF) {
0430 cf->can_id |= CAN_ERR_CNT;
0431 cf->data[6] = txerr;
0432 cf->data[7] = rxerr;
0433 }
0434 if (isrc & IRQ_BEI) {
0435
0436 priv->can.can_stats.bus_error++;
0437 stats->rx_errors++;
0438
0439 ecc = priv->read_reg(priv, SJA1000_ECC);
0440
0441 cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
0442
0443
0444 switch (ecc & ECC_MASK) {
0445 case ECC_BIT:
0446 cf->data[2] |= CAN_ERR_PROT_BIT;
0447 break;
0448 case ECC_FORM:
0449 cf->data[2] |= CAN_ERR_PROT_FORM;
0450 break;
0451 case ECC_STUFF:
0452 cf->data[2] |= CAN_ERR_PROT_STUFF;
0453 break;
0454 default:
0455 break;
0456 }
0457
0458
0459 cf->data[3] = ecc & ECC_SEG;
0460
0461
0462 if ((ecc & ECC_DIR) == 0)
0463 cf->data[2] |= CAN_ERR_PROT_TX;
0464 }
0465 if (isrc & IRQ_EPI) {
0466
0467 netdev_dbg(dev, "error passive interrupt\n");
0468
0469 if (state == CAN_STATE_ERROR_PASSIVE)
0470 state = CAN_STATE_ERROR_WARNING;
0471 else
0472 state = CAN_STATE_ERROR_PASSIVE;
0473 }
0474 if (isrc & IRQ_ALI) {
0475
0476 netdev_dbg(dev, "arbitration lost interrupt\n");
0477 alc = priv->read_reg(priv, SJA1000_ALC);
0478 priv->can.can_stats.arbitration_lost++;
0479 cf->can_id |= CAN_ERR_LOSTARB;
0480 cf->data[0] = alc & 0x1f;
0481 }
0482
0483 if (state != priv->can.state) {
0484 tx_state = txerr >= rxerr ? state : 0;
0485 rx_state = txerr <= rxerr ? state : 0;
0486
0487 can_change_state(dev, cf, tx_state, rx_state);
0488
0489 if(state == CAN_STATE_BUS_OFF)
0490 can_bus_off(dev);
0491 }
0492
0493 netif_rx(skb);
0494
0495 return 0;
0496 }
0497
0498 irqreturn_t sja1000_interrupt(int irq, void *dev_id)
0499 {
0500 struct net_device *dev = (struct net_device *)dev_id;
0501 struct sja1000_priv *priv = netdev_priv(dev);
0502 struct net_device_stats *stats = &dev->stats;
0503 uint8_t isrc, status;
0504 int n = 0;
0505
0506 if (priv->pre_irq)
0507 priv->pre_irq(priv);
0508
0509
0510 if (priv->read_reg(priv, SJA1000_IER) == IRQ_OFF)
0511 goto out;
0512
0513 while ((isrc = priv->read_reg(priv, SJA1000_IR)) &&
0514 (n < SJA1000_MAX_IRQ)) {
0515
0516 status = priv->read_reg(priv, SJA1000_SR);
0517
0518 if (status == 0xFF && sja1000_is_absent(priv))
0519 goto out;
0520
0521 if (isrc & IRQ_WUI)
0522 netdev_warn(dev, "wakeup interrupt\n");
0523
0524 if (isrc & IRQ_TI) {
0525
0526 if (priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT &&
0527 !(status & SR_TCS)) {
0528 stats->tx_errors++;
0529 can_free_echo_skb(dev, 0, NULL);
0530 } else {
0531
0532 stats->tx_bytes += can_get_echo_skb(dev, 0, NULL);
0533 stats->tx_packets++;
0534 }
0535 netif_wake_queue(dev);
0536 }
0537 if (isrc & IRQ_RI) {
0538
0539 while (status & SR_RBS) {
0540 sja1000_rx(dev);
0541 status = priv->read_reg(priv, SJA1000_SR);
0542
0543 if (status == 0xFF && sja1000_is_absent(priv))
0544 goto out;
0545 }
0546 }
0547 if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
0548
0549 if (sja1000_err(dev, isrc, status))
0550 break;
0551 }
0552 n++;
0553 }
0554 out:
0555 if (priv->post_irq)
0556 priv->post_irq(priv);
0557
0558 if (n >= SJA1000_MAX_IRQ)
0559 netdev_dbg(dev, "%d messages handled in ISR", n);
0560
0561 return (n) ? IRQ_HANDLED : IRQ_NONE;
0562 }
0563 EXPORT_SYMBOL_GPL(sja1000_interrupt);
0564
0565 static int sja1000_open(struct net_device *dev)
0566 {
0567 struct sja1000_priv *priv = netdev_priv(dev);
0568 int err;
0569
0570
0571 set_reset_mode(dev);
0572
0573
0574 err = open_candev(dev);
0575 if (err)
0576 return err;
0577
0578
0579 if (!(priv->flags & SJA1000_CUSTOM_IRQ_HANDLER)) {
0580 err = request_irq(dev->irq, sja1000_interrupt, priv->irq_flags,
0581 dev->name, (void *)dev);
0582 if (err) {
0583 close_candev(dev);
0584 return -EAGAIN;
0585 }
0586 }
0587
0588
0589 sja1000_start(dev);
0590
0591 netif_start_queue(dev);
0592
0593 return 0;
0594 }
0595
0596 static int sja1000_close(struct net_device *dev)
0597 {
0598 struct sja1000_priv *priv = netdev_priv(dev);
0599
0600 netif_stop_queue(dev);
0601 set_reset_mode(dev);
0602
0603 if (!(priv->flags & SJA1000_CUSTOM_IRQ_HANDLER))
0604 free_irq(dev->irq, (void *)dev);
0605
0606 close_candev(dev);
0607
0608 return 0;
0609 }
0610
0611 struct net_device *alloc_sja1000dev(int sizeof_priv)
0612 {
0613 struct net_device *dev;
0614 struct sja1000_priv *priv;
0615
0616 dev = alloc_candev(sizeof(struct sja1000_priv) + sizeof_priv,
0617 SJA1000_ECHO_SKB_MAX);
0618 if (!dev)
0619 return NULL;
0620
0621 priv = netdev_priv(dev);
0622
0623 priv->dev = dev;
0624 priv->can.bittiming_const = &sja1000_bittiming_const;
0625 priv->can.do_set_bittiming = sja1000_set_bittiming;
0626 priv->can.do_set_mode = sja1000_set_mode;
0627 priv->can.do_get_berr_counter = sja1000_get_berr_counter;
0628 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
0629 CAN_CTRLMODE_LISTENONLY |
0630 CAN_CTRLMODE_3_SAMPLES |
0631 CAN_CTRLMODE_ONE_SHOT |
0632 CAN_CTRLMODE_BERR_REPORTING |
0633 CAN_CTRLMODE_PRESUME_ACK |
0634 CAN_CTRLMODE_CC_LEN8_DLC;
0635
0636 spin_lock_init(&priv->cmdreg_lock);
0637
0638 if (sizeof_priv)
0639 priv->priv = (void *)priv + sizeof(struct sja1000_priv);
0640
0641 return dev;
0642 }
0643 EXPORT_SYMBOL_GPL(alloc_sja1000dev);
0644
0645 void free_sja1000dev(struct net_device *dev)
0646 {
0647 free_candev(dev);
0648 }
0649 EXPORT_SYMBOL_GPL(free_sja1000dev);
0650
0651 static const struct net_device_ops sja1000_netdev_ops = {
0652 .ndo_open = sja1000_open,
0653 .ndo_stop = sja1000_close,
0654 .ndo_start_xmit = sja1000_start_xmit,
0655 .ndo_change_mtu = can_change_mtu,
0656 };
0657
0658 static const struct ethtool_ops sja1000_ethtool_ops = {
0659 .get_ts_info = ethtool_op_get_ts_info,
0660 };
0661
0662 int register_sja1000dev(struct net_device *dev)
0663 {
0664 int ret;
0665
0666 if (!sja1000_probe_chip(dev))
0667 return -ENODEV;
0668
0669 dev->flags |= IFF_ECHO;
0670 dev->netdev_ops = &sja1000_netdev_ops;
0671 dev->ethtool_ops = &sja1000_ethtool_ops;
0672
0673 set_reset_mode(dev);
0674 chipset_init(dev);
0675
0676 ret = register_candev(dev);
0677
0678 return ret;
0679 }
0680 EXPORT_SYMBOL_GPL(register_sja1000dev);
0681
0682 void unregister_sja1000dev(struct net_device *dev)
0683 {
0684 set_reset_mode(dev);
0685 unregister_candev(dev);
0686 }
0687 EXPORT_SYMBOL_GPL(unregister_sja1000dev);
0688
0689 static __init int sja1000_init(void)
0690 {
0691 printk(KERN_INFO "%s CAN netdevice driver\n", DRV_NAME);
0692
0693 return 0;
0694 }
0695
0696 module_init(sja1000_init);
0697
0698 static __exit void sja1000_exit(void)
0699 {
0700 printk(KERN_INFO "%s: driver removed\n", DRV_NAME);
0701 }
0702
0703 module_exit(sja1000_exit);