0001
0002
0003
0004
0005
0006
0007 #include <linux/interrupt.h>
0008 #include <linux/delay.h>
0009 #include <linux/ethtool.h>
0010 #include <linux/io.h>
0011 #include <linux/module.h>
0012 #include <linux/sched.h>
0013 #include <linux/pci.h>
0014 #include <linux/kernel.h>
0015 #include <linux/types.h>
0016 #include <linux/errno.h>
0017 #include <linux/netdevice.h>
0018 #include <linux/skbuff.h>
0019 #include <linux/can.h>
0020 #include <linux/can/dev.h>
0021 #include <linux/can/error.h>
0022
0023 #define PCH_CTRL_INIT BIT(0)
0024 #define PCH_CTRL_IE BIT(1)
0025 #define PCH_CTRL_IE_SIE_EIE (BIT(3) | BIT(2) | BIT(1))
0026 #define PCH_CTRL_CCE BIT(6)
0027 #define PCH_CTRL_OPT BIT(7)
0028 #define PCH_OPT_SILENT BIT(3)
0029 #define PCH_OPT_LBACK BIT(4)
0030
0031 #define PCH_CMASK_RX_TX_SET 0x00f3
0032 #define PCH_CMASK_RX_TX_GET 0x0073
0033 #define PCH_CMASK_ALL 0xff
0034 #define PCH_CMASK_NEWDAT BIT(2)
0035 #define PCH_CMASK_CLRINTPND BIT(3)
0036 #define PCH_CMASK_CTRL BIT(4)
0037 #define PCH_CMASK_ARB BIT(5)
0038 #define PCH_CMASK_MASK BIT(6)
0039 #define PCH_CMASK_RDWR BIT(7)
0040 #define PCH_IF_MCONT_NEWDAT BIT(15)
0041 #define PCH_IF_MCONT_MSGLOST BIT(14)
0042 #define PCH_IF_MCONT_INTPND BIT(13)
0043 #define PCH_IF_MCONT_UMASK BIT(12)
0044 #define PCH_IF_MCONT_TXIE BIT(11)
0045 #define PCH_IF_MCONT_RXIE BIT(10)
0046 #define PCH_IF_MCONT_RMTEN BIT(9)
0047 #define PCH_IF_MCONT_TXRQXT BIT(8)
0048 #define PCH_IF_MCONT_EOB BIT(7)
0049 #define PCH_IF_MCONT_DLC (BIT(0) | BIT(1) | BIT(2) | BIT(3))
0050 #define PCH_MASK2_MDIR_MXTD (BIT(14) | BIT(15))
0051 #define PCH_ID2_DIR BIT(13)
0052 #define PCH_ID2_XTD BIT(14)
0053 #define PCH_ID_MSGVAL BIT(15)
0054 #define PCH_IF_CREQ_BUSY BIT(15)
0055
0056 #define PCH_STATUS_INT 0x8000
0057 #define PCH_RP 0x00008000
0058 #define PCH_REC 0x00007f00
0059 #define PCH_TEC 0x000000ff
0060
0061 #define PCH_TX_OK BIT(3)
0062 #define PCH_RX_OK BIT(4)
0063 #define PCH_EPASSIV BIT(5)
0064 #define PCH_EWARN BIT(6)
0065 #define PCH_BUS_OFF BIT(7)
0066
0067
0068 #define PCH_BIT_BRP_SHIFT 0
0069 #define PCH_BIT_SJW_SHIFT 6
0070 #define PCH_BIT_TSEG1_SHIFT 8
0071 #define PCH_BIT_TSEG2_SHIFT 12
0072 #define PCH_BIT_BRPE_BRPE_SHIFT 6
0073
0074 #define PCH_MSK_BITT_BRP 0x3f
0075 #define PCH_MSK_BRPE_BRPE 0x3c0
0076 #define PCH_MSK_CTRL_IE_SIE_EIE 0x07
0077 #define PCH_COUNTER_LIMIT 10
0078
0079 #define PCH_CAN_CLK 50000000
0080
0081
0082
0083
0084
0085
0086 #define PCH_RX_OBJ_NUM 26
0087 #define PCH_TX_OBJ_NUM 6
0088 #define PCH_RX_OBJ_START 1
0089 #define PCH_RX_OBJ_END PCH_RX_OBJ_NUM
0090 #define PCH_TX_OBJ_START (PCH_RX_OBJ_END + 1)
0091 #define PCH_TX_OBJ_END (PCH_RX_OBJ_NUM + PCH_TX_OBJ_NUM)
0092
0093 #define PCH_FIFO_THRESH 16
0094
0095
0096 #define PCH_TREQ2_TX_MASK (((1 << PCH_TX_OBJ_NUM) - 1) <<\
0097 (PCH_RX_OBJ_END - 16))
0098
0099 enum pch_ifreg {
0100 PCH_RX_IFREG,
0101 PCH_TX_IFREG,
0102 };
0103
0104 enum pch_can_err {
0105 PCH_STUF_ERR = 1,
0106 PCH_FORM_ERR,
0107 PCH_ACK_ERR,
0108 PCH_BIT1_ERR,
0109 PCH_BIT0_ERR,
0110 PCH_CRC_ERR,
0111 PCH_LEC_ALL,
0112 };
0113
0114 enum pch_can_mode {
0115 PCH_CAN_ENABLE,
0116 PCH_CAN_DISABLE,
0117 PCH_CAN_ALL,
0118 PCH_CAN_NONE,
0119 PCH_CAN_STOP,
0120 PCH_CAN_RUN,
0121 };
0122
0123 struct pch_can_if_regs {
0124 u32 creq;
0125 u32 cmask;
0126 u32 mask1;
0127 u32 mask2;
0128 u32 id1;
0129 u32 id2;
0130 u32 mcont;
0131 u32 data[4];
0132 u32 rsv[13];
0133 };
0134
0135 struct pch_can_regs {
0136 u32 cont;
0137 u32 stat;
0138 u32 errc;
0139 u32 bitt;
0140 u32 intr;
0141 u32 opt;
0142 u32 brpe;
0143 u32 reserve;
0144 struct pch_can_if_regs ifregs[2];
0145 u32 reserve1[8];
0146 u32 treq1;
0147 u32 treq2;
0148 u32 reserve2[6];
0149 u32 data1;
0150 u32 data2;
0151 u32 reserve3[6];
0152 u32 canipend1;
0153 u32 canipend2;
0154 u32 reserve4[6];
0155 u32 canmval1;
0156 u32 canmval2;
0157 u32 reserve5[37];
0158 u32 srst;
0159 };
0160
0161 struct pch_can_priv {
0162 struct can_priv can;
0163 struct pci_dev *dev;
0164 u32 tx_enable[PCH_TX_OBJ_END];
0165 u32 rx_enable[PCH_TX_OBJ_END];
0166 u32 rx_link[PCH_TX_OBJ_END];
0167 u32 int_enables;
0168 struct net_device *ndev;
0169 struct pch_can_regs __iomem *regs;
0170 struct napi_struct napi;
0171 int tx_obj;
0172 int use_msi;
0173 };
0174
0175 static const struct can_bittiming_const pch_can_bittiming_const = {
0176 .name = KBUILD_MODNAME,
0177 .tseg1_min = 2,
0178 .tseg1_max = 16,
0179 .tseg2_min = 1,
0180 .tseg2_max = 8,
0181 .sjw_max = 4,
0182 .brp_min = 1,
0183 .brp_max = 1024,
0184 .brp_inc = 1,
0185 };
0186
0187 static const struct pci_device_id pch_pci_tbl[] = {
0188 {PCI_VENDOR_ID_INTEL, 0x8818, PCI_ANY_ID, PCI_ANY_ID,},
0189 {0,}
0190 };
0191 MODULE_DEVICE_TABLE(pci, pch_pci_tbl);
0192
0193 static inline void pch_can_bit_set(void __iomem *addr, u32 mask)
0194 {
0195 iowrite32(ioread32(addr) | mask, addr);
0196 }
0197
0198 static inline void pch_can_bit_clear(void __iomem *addr, u32 mask)
0199 {
0200 iowrite32(ioread32(addr) & ~mask, addr);
0201 }
0202
0203 static void pch_can_set_run_mode(struct pch_can_priv *priv,
0204 enum pch_can_mode mode)
0205 {
0206 switch (mode) {
0207 case PCH_CAN_RUN:
0208 pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_INIT);
0209 break;
0210
0211 case PCH_CAN_STOP:
0212 pch_can_bit_set(&priv->regs->cont, PCH_CTRL_INIT);
0213 break;
0214
0215 default:
0216 netdev_err(priv->ndev, "%s -> Invalid Mode.\n", __func__);
0217 break;
0218 }
0219 }
0220
0221 static void pch_can_set_optmode(struct pch_can_priv *priv)
0222 {
0223 u32 reg_val = ioread32(&priv->regs->opt);
0224
0225 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
0226 reg_val |= PCH_OPT_SILENT;
0227
0228 if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
0229 reg_val |= PCH_OPT_LBACK;
0230
0231 pch_can_bit_set(&priv->regs->cont, PCH_CTRL_OPT);
0232 iowrite32(reg_val, &priv->regs->opt);
0233 }
0234
0235 static void pch_can_rw_msg_obj(void __iomem *creq_addr, u32 num)
0236 {
0237 int counter = PCH_COUNTER_LIMIT;
0238 u32 ifx_creq;
0239
0240 iowrite32(num, creq_addr);
0241 while (counter) {
0242 ifx_creq = ioread32(creq_addr) & PCH_IF_CREQ_BUSY;
0243 if (!ifx_creq)
0244 break;
0245 counter--;
0246 udelay(1);
0247 }
0248 if (!counter)
0249 pr_err("%s:IF1 BUSY Flag is set forever.\n", __func__);
0250 }
0251
0252 static void pch_can_set_int_enables(struct pch_can_priv *priv,
0253 enum pch_can_mode interrupt_no)
0254 {
0255 switch (interrupt_no) {
0256 case PCH_CAN_DISABLE:
0257 pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_IE);
0258 break;
0259
0260 case PCH_CAN_ALL:
0261 pch_can_bit_set(&priv->regs->cont, PCH_CTRL_IE_SIE_EIE);
0262 break;
0263
0264 case PCH_CAN_NONE:
0265 pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_IE_SIE_EIE);
0266 break;
0267
0268 default:
0269 netdev_err(priv->ndev, "Invalid interrupt number.\n");
0270 break;
0271 }
0272 }
0273
0274 static void pch_can_set_rxtx(struct pch_can_priv *priv, u32 buff_num,
0275 int set, enum pch_ifreg dir)
0276 {
0277 u32 ie;
0278
0279 if (dir)
0280 ie = PCH_IF_MCONT_TXIE;
0281 else
0282 ie = PCH_IF_MCONT_RXIE;
0283
0284
0285 iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[dir].cmask);
0286 pch_can_rw_msg_obj(&priv->regs->ifregs[dir].creq, buff_num);
0287
0288
0289 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_ARB | PCH_CMASK_CTRL,
0290 &priv->regs->ifregs[dir].cmask);
0291
0292 if (set) {
0293
0294 pch_can_bit_set(&priv->regs->ifregs[dir].mcont, ie);
0295 pch_can_bit_set(&priv->regs->ifregs[dir].id2, PCH_ID_MSGVAL);
0296 } else {
0297
0298 pch_can_bit_clear(&priv->regs->ifregs[dir].mcont, ie);
0299 pch_can_bit_clear(&priv->regs->ifregs[dir].id2, PCH_ID_MSGVAL);
0300 }
0301
0302 pch_can_rw_msg_obj(&priv->regs->ifregs[dir].creq, buff_num);
0303 }
0304
0305 static void pch_can_set_rx_all(struct pch_can_priv *priv, int set)
0306 {
0307 int i;
0308
0309
0310 for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++)
0311 pch_can_set_rxtx(priv, i, set, PCH_RX_IFREG);
0312 }
0313
0314 static void pch_can_set_tx_all(struct pch_can_priv *priv, int set)
0315 {
0316 int i;
0317
0318
0319 for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++)
0320 pch_can_set_rxtx(priv, i, set, PCH_TX_IFREG);
0321 }
0322
0323 static u32 pch_can_int_pending(struct pch_can_priv *priv)
0324 {
0325 return ioread32(&priv->regs->intr) & 0xffff;
0326 }
0327
0328 static void pch_can_clear_if_buffers(struct pch_can_priv *priv)
0329 {
0330 int i;
0331
0332 for (i = PCH_RX_OBJ_START; i <= PCH_TX_OBJ_END; i++) {
0333 iowrite32(PCH_CMASK_RX_TX_SET, &priv->regs->ifregs[0].cmask);
0334 iowrite32(0xffff, &priv->regs->ifregs[0].mask1);
0335 iowrite32(0xffff, &priv->regs->ifregs[0].mask2);
0336 iowrite32(0x0, &priv->regs->ifregs[0].id1);
0337 iowrite32(0x0, &priv->regs->ifregs[0].id2);
0338 iowrite32(0x0, &priv->regs->ifregs[0].mcont);
0339 iowrite32(0x0, &priv->regs->ifregs[0].data[0]);
0340 iowrite32(0x0, &priv->regs->ifregs[0].data[1]);
0341 iowrite32(0x0, &priv->regs->ifregs[0].data[2]);
0342 iowrite32(0x0, &priv->regs->ifregs[0].data[3]);
0343 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_MASK |
0344 PCH_CMASK_ARB | PCH_CMASK_CTRL,
0345 &priv->regs->ifregs[0].cmask);
0346 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, i);
0347 }
0348 }
0349
0350 static void pch_can_config_rx_tx_buffers(struct pch_can_priv *priv)
0351 {
0352 int i;
0353
0354 for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++) {
0355 iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
0356 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, i);
0357
0358 iowrite32(0x0, &priv->regs->ifregs[0].id1);
0359 iowrite32(0x0, &priv->regs->ifregs[0].id2);
0360
0361 pch_can_bit_set(&priv->regs->ifregs[0].mcont,
0362 PCH_IF_MCONT_UMASK);
0363
0364
0365 if (i == PCH_RX_OBJ_END)
0366 pch_can_bit_set(&priv->regs->ifregs[0].mcont,
0367 PCH_IF_MCONT_EOB);
0368 else
0369 pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
0370 PCH_IF_MCONT_EOB);
0371
0372 iowrite32(0, &priv->regs->ifregs[0].mask1);
0373 pch_can_bit_clear(&priv->regs->ifregs[0].mask2,
0374 0x1fff | PCH_MASK2_MDIR_MXTD);
0375
0376
0377 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_MASK | PCH_CMASK_ARB |
0378 PCH_CMASK_CTRL, &priv->regs->ifregs[0].cmask);
0379
0380 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, i);
0381 }
0382
0383 for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++) {
0384 iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[1].cmask);
0385 pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, i);
0386
0387
0388 iowrite32(0x0, &priv->regs->ifregs[1].id1);
0389 iowrite32(PCH_ID2_DIR, &priv->regs->ifregs[1].id2);
0390
0391
0392 iowrite32(PCH_IF_MCONT_EOB | PCH_IF_MCONT_UMASK,
0393 &priv->regs->ifregs[1].mcont);
0394
0395 iowrite32(0, &priv->regs->ifregs[1].mask1);
0396 pch_can_bit_clear(&priv->regs->ifregs[1].mask2, 0x1fff);
0397
0398
0399 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_MASK | PCH_CMASK_ARB |
0400 PCH_CMASK_CTRL, &priv->regs->ifregs[1].cmask);
0401
0402 pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, i);
0403 }
0404 }
0405
0406 static void pch_can_init(struct pch_can_priv *priv)
0407 {
0408
0409 pch_can_set_run_mode(priv, PCH_CAN_STOP);
0410
0411
0412 pch_can_clear_if_buffers(priv);
0413
0414
0415 pch_can_config_rx_tx_buffers(priv);
0416
0417
0418 pch_can_set_int_enables(priv, PCH_CAN_ALL);
0419 }
0420
0421 static void pch_can_release(struct pch_can_priv *priv)
0422 {
0423
0424 pch_can_set_run_mode(priv, PCH_CAN_STOP);
0425
0426
0427 pch_can_set_int_enables(priv, PCH_CAN_NONE);
0428
0429
0430 pch_can_set_rx_all(priv, 0);
0431
0432
0433 pch_can_set_tx_all(priv, 0);
0434 }
0435
0436
0437 static void pch_can_int_clr(struct pch_can_priv *priv, u32 mask)
0438 {
0439
0440 if ((mask >= PCH_RX_OBJ_START) && (mask <= PCH_RX_OBJ_END)) {
0441
0442 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL | PCH_CMASK_ARB,
0443 &priv->regs->ifregs[0].cmask);
0444
0445
0446 pch_can_bit_clear(&priv->regs->ifregs[0].id2, PCH_ID2_DIR);
0447
0448
0449 pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
0450 PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_INTPND);
0451
0452 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, mask);
0453 } else if ((mask >= PCH_TX_OBJ_START) && (mask <= PCH_TX_OBJ_END)) {
0454
0455
0456
0457 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL | PCH_CMASK_ARB,
0458 &priv->regs->ifregs[1].cmask);
0459
0460
0461 pch_can_bit_set(&priv->regs->ifregs[1].id2,
0462 PCH_ID2_DIR | (0x7ff << 2));
0463 iowrite32(0x0, &priv->regs->ifregs[1].id1);
0464
0465
0466 pch_can_bit_clear(&priv->regs->ifregs[1].mcont,
0467 PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_INTPND |
0468 PCH_IF_MCONT_TXRQXT);
0469 pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, mask);
0470 }
0471 }
0472
0473 static void pch_can_reset(struct pch_can_priv *priv)
0474 {
0475
0476 iowrite32(1, &priv->regs->srst);
0477 iowrite32(0, &priv->regs->srst);
0478 }
0479
0480 static void pch_can_error(struct net_device *ndev, u32 status)
0481 {
0482 struct sk_buff *skb;
0483 struct pch_can_priv *priv = netdev_priv(ndev);
0484 struct can_frame *cf;
0485 u32 errc, lec;
0486 struct net_device_stats *stats = &(priv->ndev->stats);
0487 enum can_state state = priv->can.state;
0488
0489 skb = alloc_can_err_skb(ndev, &cf);
0490 if (!skb)
0491 return;
0492
0493 errc = ioread32(&priv->regs->errc);
0494 if (status & PCH_BUS_OFF) {
0495 pch_can_set_tx_all(priv, 0);
0496 pch_can_set_rx_all(priv, 0);
0497 state = CAN_STATE_BUS_OFF;
0498 cf->can_id |= CAN_ERR_BUSOFF;
0499 priv->can.can_stats.bus_off++;
0500 can_bus_off(ndev);
0501 } else {
0502 cf->can_id |= CAN_ERR_CNT;
0503 cf->data[6] = errc & PCH_TEC;
0504 cf->data[7] = (errc & PCH_REC) >> 8;
0505 }
0506
0507
0508 if (status & PCH_EWARN) {
0509 state = CAN_STATE_ERROR_WARNING;
0510 priv->can.can_stats.error_warning++;
0511 cf->can_id |= CAN_ERR_CRTL;
0512 if (((errc & PCH_REC) >> 8) > 96)
0513 cf->data[1] |= CAN_ERR_CRTL_RX_WARNING;
0514 if ((errc & PCH_TEC) > 96)
0515 cf->data[1] |= CAN_ERR_CRTL_TX_WARNING;
0516 netdev_dbg(ndev,
0517 "%s -> Error Counter is more than 96.\n", __func__);
0518 }
0519
0520 if (status & PCH_EPASSIV) {
0521 priv->can.can_stats.error_passive++;
0522 state = CAN_STATE_ERROR_PASSIVE;
0523 cf->can_id |= CAN_ERR_CRTL;
0524 if (errc & PCH_RP)
0525 cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
0526 if ((errc & PCH_TEC) > 127)
0527 cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
0528 netdev_dbg(ndev,
0529 "%s -> CAN controller is ERROR PASSIVE .\n", __func__);
0530 }
0531
0532 lec = status & PCH_LEC_ALL;
0533 switch (lec) {
0534 case PCH_STUF_ERR:
0535 cf->data[2] |= CAN_ERR_PROT_STUFF;
0536 priv->can.can_stats.bus_error++;
0537 stats->rx_errors++;
0538 break;
0539 case PCH_FORM_ERR:
0540 cf->data[2] |= CAN_ERR_PROT_FORM;
0541 priv->can.can_stats.bus_error++;
0542 stats->rx_errors++;
0543 break;
0544 case PCH_ACK_ERR:
0545 cf->can_id |= CAN_ERR_ACK;
0546 priv->can.can_stats.bus_error++;
0547 stats->rx_errors++;
0548 break;
0549 case PCH_BIT1_ERR:
0550 case PCH_BIT0_ERR:
0551 cf->data[2] |= CAN_ERR_PROT_BIT;
0552 priv->can.can_stats.bus_error++;
0553 stats->rx_errors++;
0554 break;
0555 case PCH_CRC_ERR:
0556 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
0557 priv->can.can_stats.bus_error++;
0558 stats->rx_errors++;
0559 break;
0560 case PCH_LEC_ALL:
0561 break;
0562 }
0563
0564 priv->can.state = state;
0565 netif_receive_skb(skb);
0566 }
0567
0568 static irqreturn_t pch_can_interrupt(int irq, void *dev_id)
0569 {
0570 struct net_device *ndev = (struct net_device *)dev_id;
0571 struct pch_can_priv *priv = netdev_priv(ndev);
0572
0573 if (!pch_can_int_pending(priv))
0574 return IRQ_NONE;
0575
0576 pch_can_set_int_enables(priv, PCH_CAN_NONE);
0577 napi_schedule(&priv->napi);
0578 return IRQ_HANDLED;
0579 }
0580
0581 static void pch_fifo_thresh(struct pch_can_priv *priv, int obj_id)
0582 {
0583 if (obj_id < PCH_FIFO_THRESH) {
0584 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL |
0585 PCH_CMASK_ARB, &priv->regs->ifregs[0].cmask);
0586
0587
0588 pch_can_bit_clear(&priv->regs->ifregs[0].id2, PCH_ID2_DIR);
0589
0590
0591 pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
0592 PCH_IF_MCONT_INTPND);
0593 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, obj_id);
0594 } else if (obj_id > PCH_FIFO_THRESH) {
0595 pch_can_int_clr(priv, obj_id);
0596 } else if (obj_id == PCH_FIFO_THRESH) {
0597 int cnt;
0598 for (cnt = 0; cnt < PCH_FIFO_THRESH; cnt++)
0599 pch_can_int_clr(priv, cnt + 1);
0600 }
0601 }
0602
0603 static void pch_can_rx_msg_lost(struct net_device *ndev, int obj_id)
0604 {
0605 struct pch_can_priv *priv = netdev_priv(ndev);
0606 struct net_device_stats *stats = &(priv->ndev->stats);
0607 struct sk_buff *skb;
0608 struct can_frame *cf;
0609
0610 netdev_dbg(priv->ndev, "Msg Obj is overwritten.\n");
0611 pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
0612 PCH_IF_MCONT_MSGLOST);
0613 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL,
0614 &priv->regs->ifregs[0].cmask);
0615 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, obj_id);
0616
0617 skb = alloc_can_err_skb(ndev, &cf);
0618 if (!skb)
0619 return;
0620
0621 cf->can_id |= CAN_ERR_CRTL;
0622 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
0623 stats->rx_over_errors++;
0624 stats->rx_errors++;
0625
0626 netif_receive_skb(skb);
0627 }
0628
0629 static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota)
0630 {
0631 u32 reg;
0632 canid_t id;
0633 int rcv_pkts = 0;
0634 struct sk_buff *skb;
0635 struct can_frame *cf;
0636 struct pch_can_priv *priv = netdev_priv(ndev);
0637 struct net_device_stats *stats = &(priv->ndev->stats);
0638 int i;
0639 u32 id2;
0640 u16 data_reg;
0641
0642 do {
0643
0644 iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
0645 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, obj_num);
0646
0647
0648 reg = ioread32(&priv->regs->ifregs[0].mcont);
0649
0650 if (reg & PCH_IF_MCONT_EOB)
0651 break;
0652
0653
0654 if (reg & PCH_IF_MCONT_MSGLOST) {
0655 pch_can_rx_msg_lost(ndev, obj_num);
0656 rcv_pkts++;
0657 quota--;
0658 obj_num++;
0659 continue;
0660 } else if (!(reg & PCH_IF_MCONT_NEWDAT)) {
0661 obj_num++;
0662 continue;
0663 }
0664
0665 skb = alloc_can_skb(priv->ndev, &cf);
0666 if (!skb) {
0667 netdev_err(ndev, "alloc_can_skb Failed\n");
0668 return rcv_pkts;
0669 }
0670
0671
0672 id2 = ioread32(&priv->regs->ifregs[0].id2);
0673 if (id2 & PCH_ID2_XTD) {
0674 id = (ioread32(&priv->regs->ifregs[0].id1) & 0xffff);
0675 id |= (((id2) & 0x1fff) << 16);
0676 cf->can_id = id | CAN_EFF_FLAG;
0677 } else {
0678 id = (id2 >> 2) & CAN_SFF_MASK;
0679 cf->can_id = id;
0680 }
0681
0682 cf->len = can_cc_dlc2len((ioread32(&priv->regs->
0683 ifregs[0].mcont)) & 0xF);
0684
0685 if (id2 & PCH_ID2_DIR) {
0686 cf->can_id |= CAN_RTR_FLAG;
0687 } else {
0688 for (i = 0; i < cf->len; i += 2) {
0689 data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
0690 cf->data[i] = data_reg;
0691 cf->data[i + 1] = data_reg >> 8;
0692 }
0693
0694 stats->rx_bytes += cf->len;
0695 }
0696 stats->rx_packets++;
0697 rcv_pkts++;
0698 quota--;
0699 netif_receive_skb(skb);
0700
0701 pch_fifo_thresh(priv, obj_num);
0702 obj_num++;
0703 } while (quota > 0);
0704
0705 return rcv_pkts;
0706 }
0707
0708 static void pch_can_tx_complete(struct net_device *ndev, u32 int_stat)
0709 {
0710 struct pch_can_priv *priv = netdev_priv(ndev);
0711 struct net_device_stats *stats = &(priv->ndev->stats);
0712
0713 stats->tx_bytes += can_get_echo_skb(ndev, int_stat - PCH_RX_OBJ_END - 1,
0714 NULL);
0715 stats->tx_packets++;
0716 iowrite32(PCH_CMASK_RX_TX_GET | PCH_CMASK_CLRINTPND,
0717 &priv->regs->ifregs[1].cmask);
0718 pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, int_stat);
0719 if (int_stat == PCH_TX_OBJ_END)
0720 netif_wake_queue(ndev);
0721 }
0722
0723 static int pch_can_poll(struct napi_struct *napi, int quota)
0724 {
0725 struct net_device *ndev = napi->dev;
0726 struct pch_can_priv *priv = netdev_priv(ndev);
0727 u32 int_stat;
0728 u32 reg_stat;
0729 int quota_save = quota;
0730
0731 int_stat = pch_can_int_pending(priv);
0732 if (!int_stat)
0733 goto end;
0734
0735 if (int_stat == PCH_STATUS_INT) {
0736 reg_stat = ioread32(&priv->regs->stat);
0737
0738 if ((reg_stat & (PCH_BUS_OFF | PCH_LEC_ALL)) &&
0739 ((reg_stat & PCH_LEC_ALL) != PCH_LEC_ALL)) {
0740 pch_can_error(ndev, reg_stat);
0741 quota--;
0742 }
0743
0744 if (reg_stat & (PCH_TX_OK | PCH_RX_OK))
0745 pch_can_bit_clear(&priv->regs->stat,
0746 reg_stat & (PCH_TX_OK | PCH_RX_OK));
0747
0748 int_stat = pch_can_int_pending(priv);
0749 }
0750
0751 if (quota == 0)
0752 goto end;
0753
0754 if ((int_stat >= PCH_RX_OBJ_START) && (int_stat <= PCH_RX_OBJ_END)) {
0755 quota -= pch_can_rx_normal(ndev, int_stat, quota);
0756 } else if ((int_stat >= PCH_TX_OBJ_START) &&
0757 (int_stat <= PCH_TX_OBJ_END)) {
0758
0759 pch_can_tx_complete(ndev, int_stat);
0760 }
0761
0762 end:
0763 napi_complete(napi);
0764 pch_can_set_int_enables(priv, PCH_CAN_ALL);
0765
0766 return quota_save - quota;
0767 }
0768
0769 static int pch_set_bittiming(struct net_device *ndev)
0770 {
0771 struct pch_can_priv *priv = netdev_priv(ndev);
0772 const struct can_bittiming *bt = &priv->can.bittiming;
0773 u32 canbit;
0774 u32 bepe;
0775
0776
0777 pch_can_bit_set(&priv->regs->cont, PCH_CTRL_CCE);
0778
0779 canbit = (bt->brp - 1) & PCH_MSK_BITT_BRP;
0780 canbit |= (bt->sjw - 1) << PCH_BIT_SJW_SHIFT;
0781 canbit |= (bt->phase_seg1 + bt->prop_seg - 1) << PCH_BIT_TSEG1_SHIFT;
0782 canbit |= (bt->phase_seg2 - 1) << PCH_BIT_TSEG2_SHIFT;
0783 bepe = ((bt->brp - 1) & PCH_MSK_BRPE_BRPE) >> PCH_BIT_BRPE_BRPE_SHIFT;
0784 iowrite32(canbit, &priv->regs->bitt);
0785 iowrite32(bepe, &priv->regs->brpe);
0786 pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_CCE);
0787
0788 return 0;
0789 }
0790
0791 static void pch_can_start(struct net_device *ndev)
0792 {
0793 struct pch_can_priv *priv = netdev_priv(ndev);
0794
0795 if (priv->can.state != CAN_STATE_STOPPED)
0796 pch_can_reset(priv);
0797
0798 pch_set_bittiming(ndev);
0799 pch_can_set_optmode(priv);
0800
0801 pch_can_set_tx_all(priv, 1);
0802 pch_can_set_rx_all(priv, 1);
0803
0804
0805 pch_can_set_run_mode(priv, PCH_CAN_RUN);
0806
0807 priv->can.state = CAN_STATE_ERROR_ACTIVE;
0808
0809 return;
0810 }
0811
0812 static int pch_can_do_set_mode(struct net_device *ndev, enum can_mode mode)
0813 {
0814 int ret = 0;
0815
0816 switch (mode) {
0817 case CAN_MODE_START:
0818 pch_can_start(ndev);
0819 netif_wake_queue(ndev);
0820 break;
0821 default:
0822 ret = -EOPNOTSUPP;
0823 break;
0824 }
0825
0826 return ret;
0827 }
0828
0829 static int pch_can_open(struct net_device *ndev)
0830 {
0831 struct pch_can_priv *priv = netdev_priv(ndev);
0832 int retval;
0833
0834
0835 retval = request_irq(priv->dev->irq, pch_can_interrupt, IRQF_SHARED,
0836 ndev->name, ndev);
0837 if (retval) {
0838 netdev_err(ndev, "request_irq failed.\n");
0839 goto req_irq_err;
0840 }
0841
0842
0843 retval = open_candev(ndev);
0844 if (retval) {
0845 netdev_err(ndev, "open_candev() failed %d\n", retval);
0846 goto err_open_candev;
0847 }
0848
0849 pch_can_init(priv);
0850 pch_can_start(ndev);
0851 napi_enable(&priv->napi);
0852 netif_start_queue(ndev);
0853
0854 return 0;
0855
0856 err_open_candev:
0857 free_irq(priv->dev->irq, ndev);
0858 req_irq_err:
0859 pch_can_release(priv);
0860
0861 return retval;
0862 }
0863
0864 static int pch_close(struct net_device *ndev)
0865 {
0866 struct pch_can_priv *priv = netdev_priv(ndev);
0867
0868 netif_stop_queue(ndev);
0869 napi_disable(&priv->napi);
0870 pch_can_release(priv);
0871 free_irq(priv->dev->irq, ndev);
0872 close_candev(ndev);
0873 priv->can.state = CAN_STATE_STOPPED;
0874 return 0;
0875 }
0876
0877 static netdev_tx_t pch_xmit(struct sk_buff *skb, struct net_device *ndev)
0878 {
0879 struct pch_can_priv *priv = netdev_priv(ndev);
0880 struct can_frame *cf = (struct can_frame *)skb->data;
0881 int tx_obj_no;
0882 int i;
0883 u32 id2;
0884
0885 if (can_dropped_invalid_skb(ndev, skb))
0886 return NETDEV_TX_OK;
0887
0888 tx_obj_no = priv->tx_obj;
0889 if (priv->tx_obj == PCH_TX_OBJ_END) {
0890 if (ioread32(&priv->regs->treq2) & PCH_TREQ2_TX_MASK)
0891 netif_stop_queue(ndev);
0892
0893 priv->tx_obj = PCH_TX_OBJ_START;
0894 } else {
0895 priv->tx_obj++;
0896 }
0897
0898
0899 pch_can_bit_set(&priv->regs->ifregs[1].cmask, PCH_CMASK_ALL);
0900
0901
0902 if (cf->can_id & CAN_EFF_FLAG) {
0903 iowrite32(cf->can_id & 0xffff, &priv->regs->ifregs[1].id1);
0904 id2 = ((cf->can_id >> 16) & 0x1fff) | PCH_ID2_XTD;
0905 } else {
0906 iowrite32(0, &priv->regs->ifregs[1].id1);
0907 id2 = (cf->can_id & CAN_SFF_MASK) << 2;
0908 }
0909
0910 id2 |= PCH_ID_MSGVAL;
0911
0912
0913 if (!(cf->can_id & CAN_RTR_FLAG))
0914 id2 |= PCH_ID2_DIR;
0915
0916 iowrite32(id2, &priv->regs->ifregs[1].id2);
0917
0918
0919 for (i = 0; i < cf->len; i += 2) {
0920 iowrite16(cf->data[i] | (cf->data[i + 1] << 8),
0921 &priv->regs->ifregs[1].data[i / 2]);
0922 }
0923
0924 can_put_echo_skb(skb, ndev, tx_obj_no - PCH_RX_OBJ_END - 1, 0);
0925
0926
0927 iowrite32(cf->len | PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_TXRQXT |
0928 PCH_IF_MCONT_TXIE, &priv->regs->ifregs[1].mcont);
0929
0930 pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, tx_obj_no);
0931
0932 return NETDEV_TX_OK;
0933 }
0934
0935 static const struct net_device_ops pch_can_netdev_ops = {
0936 .ndo_open = pch_can_open,
0937 .ndo_stop = pch_close,
0938 .ndo_start_xmit = pch_xmit,
0939 .ndo_change_mtu = can_change_mtu,
0940 };
0941
0942 static const struct ethtool_ops pch_can_ethtool_ops = {
0943 .get_ts_info = ethtool_op_get_ts_info,
0944 };
0945
0946 static void pch_can_remove(struct pci_dev *pdev)
0947 {
0948 struct net_device *ndev = pci_get_drvdata(pdev);
0949 struct pch_can_priv *priv = netdev_priv(ndev);
0950
0951 unregister_candev(priv->ndev);
0952 if (priv->use_msi)
0953 pci_disable_msi(priv->dev);
0954 pci_release_regions(pdev);
0955 pci_disable_device(pdev);
0956 pch_can_reset(priv);
0957 pci_iounmap(pdev, priv->regs);
0958 free_candev(priv->ndev);
0959 }
0960
0961 static void __maybe_unused pch_can_set_int_custom(struct pch_can_priv *priv)
0962 {
0963
0964 pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_IE_SIE_EIE);
0965
0966
0967 pch_can_bit_set(&priv->regs->cont,
0968 ((priv->int_enables & PCH_MSK_CTRL_IE_SIE_EIE) << 1));
0969 }
0970
0971
0972 static u32 __maybe_unused pch_can_get_int_enables(struct pch_can_priv *priv)
0973 {
0974
0975 return (ioread32(&priv->regs->cont) & PCH_CTRL_IE_SIE_EIE) >> 1;
0976 }
0977
0978 static u32 __maybe_unused pch_can_get_rxtx_ir(struct pch_can_priv *priv,
0979 u32 buff_num, enum pch_ifreg dir)
0980 {
0981 u32 ie, enable;
0982
0983 if (dir)
0984 ie = PCH_IF_MCONT_RXIE;
0985 else
0986 ie = PCH_IF_MCONT_TXIE;
0987
0988 iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[dir].cmask);
0989 pch_can_rw_msg_obj(&priv->regs->ifregs[dir].creq, buff_num);
0990
0991 if (((ioread32(&priv->regs->ifregs[dir].id2)) & PCH_ID_MSGVAL) &&
0992 ((ioread32(&priv->regs->ifregs[dir].mcont)) & ie))
0993 enable = 1;
0994 else
0995 enable = 0;
0996
0997 return enable;
0998 }
0999
1000 static void __maybe_unused pch_can_set_rx_buffer_link(struct pch_can_priv *priv,
1001 u32 buffer_num, int set)
1002 {
1003 iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
1004 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, buffer_num);
1005 iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL,
1006 &priv->regs->ifregs[0].cmask);
1007 if (set)
1008 pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
1009 PCH_IF_MCONT_EOB);
1010 else
1011 pch_can_bit_set(&priv->regs->ifregs[0].mcont, PCH_IF_MCONT_EOB);
1012
1013 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, buffer_num);
1014 }
1015
1016 static u32 __maybe_unused pch_can_get_rx_buffer_link(struct pch_can_priv *priv,
1017 u32 buffer_num)
1018 {
1019 u32 link;
1020
1021 iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
1022 pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, buffer_num);
1023
1024 if (ioread32(&priv->regs->ifregs[0].mcont) & PCH_IF_MCONT_EOB)
1025 link = 0;
1026 else
1027 link = 1;
1028 return link;
1029 }
1030
1031 static int __maybe_unused pch_can_get_buffer_status(struct pch_can_priv *priv)
1032 {
1033 return (ioread32(&priv->regs->treq1) & 0xffff) |
1034 (ioread32(&priv->regs->treq2) << 16);
1035 }
1036
1037 static int __maybe_unused pch_can_suspend(struct device *dev_d)
1038 {
1039 int i;
1040 u32 buf_stat;
1041 int counter = PCH_COUNTER_LIMIT;
1042
1043 struct net_device *dev = dev_get_drvdata(dev_d);
1044 struct pch_can_priv *priv = netdev_priv(dev);
1045
1046
1047 pch_can_set_run_mode(priv, PCH_CAN_STOP);
1048
1049
1050 priv->can.state = CAN_STATE_STOPPED;
1051
1052
1053 while (counter) {
1054 buf_stat = pch_can_get_buffer_status(priv);
1055 if (!buf_stat)
1056 break;
1057 counter--;
1058 udelay(1);
1059 }
1060 if (!counter)
1061 dev_err(dev_d, "%s -> Transmission time out.\n", __func__);
1062
1063
1064 priv->int_enables = pch_can_get_int_enables(priv);
1065 pch_can_set_int_enables(priv, PCH_CAN_DISABLE);
1066
1067
1068 for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++)
1069 priv->tx_enable[i - 1] = pch_can_get_rxtx_ir(priv, i,
1070 PCH_TX_IFREG);
1071
1072
1073 pch_can_set_tx_all(priv, 0);
1074
1075
1076 for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++) {
1077 priv->rx_enable[i - 1] = pch_can_get_rxtx_ir(priv, i,
1078 PCH_RX_IFREG);
1079 priv->rx_link[i - 1] = pch_can_get_rx_buffer_link(priv, i);
1080 }
1081
1082
1083 pch_can_set_rx_all(priv, 0);
1084
1085 return 0;
1086 }
1087
1088 static int __maybe_unused pch_can_resume(struct device *dev_d)
1089 {
1090 int i;
1091 struct net_device *dev = dev_get_drvdata(dev_d);
1092 struct pch_can_priv *priv = netdev_priv(dev);
1093
1094 priv->can.state = CAN_STATE_ERROR_ACTIVE;
1095
1096
1097 pch_can_set_int_enables(priv, PCH_CAN_DISABLE);
1098
1099
1100 pch_can_set_run_mode(priv, PCH_CAN_STOP);
1101
1102
1103 pch_can_config_rx_tx_buffers(priv);
1104
1105
1106 pch_set_bittiming(dev);
1107
1108
1109 pch_can_set_optmode(priv);
1110
1111
1112 for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++)
1113 pch_can_set_rxtx(priv, i, priv->tx_enable[i - 1], PCH_TX_IFREG);
1114
1115
1116 for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++) {
1117
1118 pch_can_set_rx_buffer_link(priv, i, priv->rx_link[i - 1]);
1119
1120
1121 pch_can_set_rxtx(priv, i, priv->rx_enable[i - 1], PCH_RX_IFREG);
1122 }
1123
1124
1125 pch_can_set_int_custom(priv);
1126
1127
1128 pch_can_set_run_mode(priv, PCH_CAN_RUN);
1129
1130 return 0;
1131 }
1132
1133 static int pch_can_get_berr_counter(const struct net_device *dev,
1134 struct can_berr_counter *bec)
1135 {
1136 struct pch_can_priv *priv = netdev_priv(dev);
1137 u32 errc = ioread32(&priv->regs->errc);
1138
1139 bec->txerr = errc & PCH_TEC;
1140 bec->rxerr = (errc & PCH_REC) >> 8;
1141
1142 return 0;
1143 }
1144
1145 static int pch_can_probe(struct pci_dev *pdev,
1146 const struct pci_device_id *id)
1147 {
1148 struct net_device *ndev;
1149 struct pch_can_priv *priv;
1150 int rc;
1151 void __iomem *addr;
1152
1153 rc = pci_enable_device(pdev);
1154 if (rc) {
1155 dev_err(&pdev->dev, "Failed pci_enable_device %d\n", rc);
1156 goto probe_exit_endev;
1157 }
1158
1159 rc = pci_request_regions(pdev, KBUILD_MODNAME);
1160 if (rc) {
1161 dev_err(&pdev->dev, "Failed pci_request_regions %d\n", rc);
1162 goto probe_exit_pcireq;
1163 }
1164
1165 addr = pci_iomap(pdev, 1, 0);
1166 if (!addr) {
1167 rc = -EIO;
1168 dev_err(&pdev->dev, "Failed pci_iomap\n");
1169 goto probe_exit_ipmap;
1170 }
1171
1172 ndev = alloc_candev(sizeof(struct pch_can_priv), PCH_TX_OBJ_END);
1173 if (!ndev) {
1174 rc = -ENOMEM;
1175 dev_err(&pdev->dev, "Failed alloc_candev\n");
1176 goto probe_exit_alloc_candev;
1177 }
1178
1179 priv = netdev_priv(ndev);
1180 priv->ndev = ndev;
1181 priv->regs = addr;
1182 priv->dev = pdev;
1183 priv->can.bittiming_const = &pch_can_bittiming_const;
1184 priv->can.do_set_mode = pch_can_do_set_mode;
1185 priv->can.do_get_berr_counter = pch_can_get_berr_counter;
1186 priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
1187 CAN_CTRLMODE_LOOPBACK;
1188 priv->tx_obj = PCH_TX_OBJ_START;
1189
1190 ndev->irq = pdev->irq;
1191 ndev->flags |= IFF_ECHO;
1192
1193 pci_set_drvdata(pdev, ndev);
1194 SET_NETDEV_DEV(ndev, &pdev->dev);
1195 ndev->netdev_ops = &pch_can_netdev_ops;
1196 ndev->ethtool_ops = &pch_can_ethtool_ops;
1197 priv->can.clock.freq = PCH_CAN_CLK;
1198
1199 netif_napi_add_weight(ndev, &priv->napi, pch_can_poll, PCH_RX_OBJ_END);
1200
1201 rc = pci_enable_msi(priv->dev);
1202 if (rc) {
1203 netdev_err(ndev, "PCH CAN opened without MSI\n");
1204 priv->use_msi = 0;
1205 } else {
1206 netdev_err(ndev, "PCH CAN opened with MSI\n");
1207 pci_set_master(pdev);
1208 priv->use_msi = 1;
1209 }
1210
1211 rc = register_candev(ndev);
1212 if (rc) {
1213 dev_err(&pdev->dev, "Failed register_candev %d\n", rc);
1214 goto probe_exit_reg_candev;
1215 }
1216
1217 return 0;
1218
1219 probe_exit_reg_candev:
1220 if (priv->use_msi)
1221 pci_disable_msi(priv->dev);
1222 free_candev(ndev);
1223 probe_exit_alloc_candev:
1224 pci_iounmap(pdev, addr);
1225 probe_exit_ipmap:
1226 pci_release_regions(pdev);
1227 probe_exit_pcireq:
1228 pci_disable_device(pdev);
1229 probe_exit_endev:
1230 return rc;
1231 }
1232
1233 static SIMPLE_DEV_PM_OPS(pch_can_pm_ops,
1234 pch_can_suspend,
1235 pch_can_resume);
1236
1237 static struct pci_driver pch_can_pci_driver = {
1238 .name = "pch_can",
1239 .id_table = pch_pci_tbl,
1240 .probe = pch_can_probe,
1241 .remove = pch_can_remove,
1242 .driver.pm = &pch_can_pm_ops,
1243 };
1244
1245 module_pci_driver(pch_can_pci_driver);
1246
1247 MODULE_DESCRIPTION("Intel EG20T PCH CAN(Controller Area Network) Driver");
1248 MODULE_LICENSE("GPL v2");
1249 MODULE_VERSION("0.94");