1 // SPDX-License-Identifier: GPL-2.0 2 /* Parts of this driver are based on the following: 3 * - Kvaser linux leaf driver (version 4.78) 4 * - CAN driver for esd CAN-USB/2 5 * - Kvaser linux usbcanII driver (version 5.3) 6 * 7 * Copyright (C) 2002-2018 KVASER AB, Sweden. All rights reserved. 8 * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh 9 * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be> 10 * Copyright (C) 2015 Valeo S.A. 11 */ 12 13 #include <linux/completion.h> 14 #include <linux/device.h> 15 #include <linux/gfp.h> 16 #include <linux/jiffies.h> 17 #include <linux/kernel.h> 18 #include <linux/netdevice.h> 19 #include <linux/spinlock.h> 20 #include <linux/string.h> 21 #include <linux/types.h> 22 #include <linux/usb.h> 23 24 #include <linux/can.h> 25 #include <linux/can/dev.h> 26 #include <linux/can/error.h> 27 #include <linux/can/netlink.h> 28 29 #include "kvaser_usb.h" 30 31 /* Forward declaration */ 32 static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg; 33 34 #define CAN_USB_CLOCK 8000000 35 #define MAX_USBCAN_NET_DEVICES 2 36 37 /* Command header size */ 38 #define CMD_HEADER_LEN 2 39 40 /* Kvaser CAN message flags */ 41 #define MSG_FLAG_ERROR_FRAME BIT(0) 42 #define MSG_FLAG_OVERRUN BIT(1) 43 #define MSG_FLAG_NERR BIT(2) 44 #define MSG_FLAG_WAKEUP BIT(3) 45 #define MSG_FLAG_REMOTE_FRAME BIT(4) 46 #define MSG_FLAG_RESERVED BIT(5) 47 #define MSG_FLAG_TX_ACK BIT(6) 48 #define MSG_FLAG_TX_REQUEST BIT(7) 49 50 /* CAN states (M16C CxSTRH register) */ 51 #define M16C_STATE_BUS_RESET BIT(0) 52 #define M16C_STATE_BUS_ERROR BIT(4) 53 #define M16C_STATE_BUS_PASSIVE BIT(5) 54 #define M16C_STATE_BUS_OFF BIT(6) 55 56 /* Leaf/usbcan command ids */ 57 #define CMD_RX_STD_MESSAGE 12 58 #define CMD_TX_STD_MESSAGE 13 59 #define CMD_RX_EXT_MESSAGE 14 60 #define CMD_TX_EXT_MESSAGE 15 61 #define CMD_SET_BUS_PARAMS 16 62 #define CMD_CHIP_STATE_EVENT 20 63 #define CMD_SET_CTRL_MODE 21 64 #define CMD_RESET_CHIP 24 65 #define CMD_START_CHIP 26 66 #define CMD_START_CHIP_REPLY 27 67 #define CMD_STOP_CHIP 28 68 #define CMD_STOP_CHIP_REPLY 29 69 70 #define CMD_USBCAN_CLOCK_OVERFLOW_EVENT 33 71 72 #define CMD_GET_CARD_INFO 34 73 #define CMD_GET_CARD_INFO_REPLY 35 74 #define CMD_GET_SOFTWARE_INFO 38 75 #define CMD_GET_SOFTWARE_INFO_REPLY 39 76 #define CMD_FLUSH_QUEUE 48 77 #define CMD_TX_ACKNOWLEDGE 50 78 #define CMD_CAN_ERROR_EVENT 51 79 #define CMD_FLUSH_QUEUE_REPLY 68 80 81 #define CMD_LEAF_LOG_MESSAGE 106 82 83 /* error factors */ 84 #define M16C_EF_ACKE BIT(0) 85 #define M16C_EF_CRCE BIT(1) 86 #define M16C_EF_FORME BIT(2) 87 #define M16C_EF_STFE BIT(3) 88 #define M16C_EF_BITE0 BIT(4) 89 #define M16C_EF_BITE1 BIT(5) 90 #define M16C_EF_RCVE BIT(6) 91 #define M16C_EF_TRE BIT(7) 92 93 /* Only Leaf-based devices can report M16C error factors, 94 * thus define our own error status flags for USBCANII 95 */ 96 #define USBCAN_ERROR_STATE_NONE 0 97 #define USBCAN_ERROR_STATE_TX_ERROR BIT(0) 98 #define USBCAN_ERROR_STATE_RX_ERROR BIT(1) 99 #define USBCAN_ERROR_STATE_BUSERROR BIT(2) 100 101 /* bittiming parameters */ 102 #define KVASER_USB_TSEG1_MIN 1 103 #define KVASER_USB_TSEG1_MAX 16 104 #define KVASER_USB_TSEG2_MIN 1 105 #define KVASER_USB_TSEG2_MAX 8 106 #define KVASER_USB_SJW_MAX 4 107 #define KVASER_USB_BRP_MIN 1 108 #define KVASER_USB_BRP_MAX 64 109 #define KVASER_USB_BRP_INC 1 110 111 /* ctrl modes */ 112 #define KVASER_CTRL_MODE_NORMAL 1 113 #define KVASER_CTRL_MODE_SILENT 2 114 #define KVASER_CTRL_MODE_SELFRECEPTION 3 115 #define KVASER_CTRL_MODE_OFF 4 116 117 /* Extended CAN identifier flag */ 118 #define KVASER_EXTENDED_FRAME BIT(31) 119 120 struct kvaser_cmd_simple { 121 u8 tid; 122 u8 channel; 123 } __packed; 124 125 struct kvaser_cmd_cardinfo { 126 u8 tid; 127 u8 nchannels; 128 __le32 serial_number; 129 __le32 padding0; 130 __le32 clock_resolution; 131 __le32 mfgdate; 132 u8 ean[8]; 133 u8 hw_revision; 134 union { 135 struct { 136 u8 usb_hs_mode; 137 } __packed leaf1; 138 struct { 139 u8 padding; 140 } __packed usbcan1; 141 } __packed; 142 __le16 padding1; 143 } __packed; 144 145 struct leaf_cmd_softinfo { 146 u8 tid; 147 u8 padding0; 148 __le32 sw_options; 149 __le32 fw_version; 150 __le16 max_outstanding_tx; 151 __le16 padding1[9]; 152 } __packed; 153 154 struct usbcan_cmd_softinfo { 155 u8 tid; 156 u8 fw_name[5]; 157 __le16 max_outstanding_tx; 158 u8 padding[6]; 159 __le32 fw_version; 160 __le16 checksum; 161 __le16 sw_options; 162 } __packed; 163 164 struct kvaser_cmd_busparams { 165 u8 tid; 166 u8 channel; 167 __le32 bitrate; 168 u8 tseg1; 169 u8 tseg2; 170 u8 sjw; 171 u8 no_samp; 172 } __packed; 173 174 struct kvaser_cmd_tx_can { 175 u8 channel; 176 u8 tid; 177 u8 data[14]; 178 union { 179 struct { 180 u8 padding; 181 u8 flags; 182 } __packed leaf; 183 struct { 184 u8 flags; 185 u8 padding; 186 } __packed usbcan; 187 } __packed; 188 } __packed; 189 190 struct kvaser_cmd_rx_can_header { 191 u8 channel; 192 u8 flag; 193 } __packed; 194 195 struct leaf_cmd_rx_can { 196 u8 channel; 197 u8 flag; 198 199 __le16 time[3]; 200 u8 data[14]; 201 } __packed; 202 203 struct usbcan_cmd_rx_can { 204 u8 channel; 205 u8 flag; 206 207 u8 data[14]; 208 __le16 time; 209 } __packed; 210 211 struct leaf_cmd_chip_state_event { 212 u8 tid; 213 u8 channel; 214 215 __le16 time[3]; 216 u8 tx_errors_count; 217 u8 rx_errors_count; 218 219 u8 status; 220 u8 padding[3]; 221 } __packed; 222 223 struct usbcan_cmd_chip_state_event { 224 u8 tid; 225 u8 channel; 226 227 u8 tx_errors_count; 228 u8 rx_errors_count; 229 __le16 time; 230 231 u8 status; 232 u8 padding[3]; 233 } __packed; 234 235 struct kvaser_cmd_tx_acknowledge_header { 236 u8 channel; 237 u8 tid; 238 } __packed; 239 240 struct leaf_cmd_error_event { 241 u8 tid; 242 u8 flags; 243 __le16 time[3]; 244 u8 channel; 245 u8 padding; 246 u8 tx_errors_count; 247 u8 rx_errors_count; 248 u8 status; 249 u8 error_factor; 250 } __packed; 251 252 struct usbcan_cmd_error_event { 253 u8 tid; 254 u8 padding; 255 u8 tx_errors_count_ch0; 256 u8 rx_errors_count_ch0; 257 u8 tx_errors_count_ch1; 258 u8 rx_errors_count_ch1; 259 u8 status_ch0; 260 u8 status_ch1; 261 __le16 time; 262 } __packed; 263 264 struct kvaser_cmd_ctrl_mode { 265 u8 tid; 266 u8 channel; 267 u8 ctrl_mode; 268 u8 padding[3]; 269 } __packed; 270 271 struct kvaser_cmd_flush_queue { 272 u8 tid; 273 u8 channel; 274 u8 flags; 275 u8 padding[3]; 276 } __packed; 277 278 struct leaf_cmd_log_message { 279 u8 channel; 280 u8 flags; 281 __le16 time[3]; 282 u8 dlc; 283 u8 time_offset; 284 __le32 id; 285 u8 data[8]; 286 } __packed; 287 288 struct kvaser_cmd { 289 u8 len; 290 u8 id; 291 union { 292 struct kvaser_cmd_simple simple; 293 struct kvaser_cmd_cardinfo cardinfo; 294 struct kvaser_cmd_busparams busparams; 295 296 struct kvaser_cmd_rx_can_header rx_can_header; 297 struct kvaser_cmd_tx_acknowledge_header tx_acknowledge_header; 298 299 union { 300 struct leaf_cmd_softinfo softinfo; 301 struct leaf_cmd_rx_can rx_can; 302 struct leaf_cmd_chip_state_event chip_state_event; 303 struct leaf_cmd_error_event error_event; 304 struct leaf_cmd_log_message log_message; 305 } __packed leaf; 306 307 union { 308 struct usbcan_cmd_softinfo softinfo; 309 struct usbcan_cmd_rx_can rx_can; 310 struct usbcan_cmd_chip_state_event chip_state_event; 311 struct usbcan_cmd_error_event error_event; 312 } __packed usbcan; 313 314 struct kvaser_cmd_tx_can tx_can; 315 struct kvaser_cmd_ctrl_mode ctrl_mode; 316 struct kvaser_cmd_flush_queue flush_queue; 317 } u; 318 } __packed; 319 320 /* Summary of a kvaser error event, for a unified Leaf/Usbcan error 321 * handling. Some discrepancies between the two families exist: 322 * 323 * - USBCAN firmware does not report M16C "error factors" 324 * - USBCAN controllers has difficulties reporting if the raised error 325 * event is for ch0 or ch1. They leave such arbitration to the OS 326 * driver by letting it compare error counters with previous values 327 * and decide the error event's channel. Thus for USBCAN, the channel 328 * field is only advisory. 329 */ 330 struct kvaser_usb_err_summary { 331 u8 channel, status, txerr, rxerr; 332 union { 333 struct { 334 u8 error_factor; 335 } leaf; 336 struct { 337 u8 other_ch_status; 338 u8 error_state; 339 } usbcan; 340 }; 341 }; 342 343 static void * 344 kvaser_usb_leaf_frame_to_cmd(const struct kvaser_usb_net_priv *priv, 345 const struct sk_buff *skb, int *frame_len, 346 int *cmd_len, u16 transid) 347 { 348 struct kvaser_usb *dev = priv->dev; 349 struct kvaser_cmd *cmd; 350 u8 *cmd_tx_can_flags = NULL; /* GCC */ 351 struct can_frame *cf = (struct can_frame *)skb->data; 352 353 *frame_len = cf->can_dlc; 354 355 cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC); 356 if (cmd) { 357 cmd->u.tx_can.tid = transid & 0xff; 358 cmd->len = *cmd_len = CMD_HEADER_LEN + 359 sizeof(struct kvaser_cmd_tx_can); 360 cmd->u.tx_can.channel = priv->channel; 361 362 switch (dev->card_data.leaf.family) { 363 case KVASER_LEAF: 364 cmd_tx_can_flags = &cmd->u.tx_can.leaf.flags; 365 break; 366 case KVASER_USBCAN: 367 cmd_tx_can_flags = &cmd->u.tx_can.usbcan.flags; 368 break; 369 } 370 371 *cmd_tx_can_flags = 0; 372 373 if (cf->can_id & CAN_EFF_FLAG) { 374 cmd->id = CMD_TX_EXT_MESSAGE; 375 cmd->u.tx_can.data[0] = (cf->can_id >> 24) & 0x1f; 376 cmd->u.tx_can.data[1] = (cf->can_id >> 18) & 0x3f; 377 cmd->u.tx_can.data[2] = (cf->can_id >> 14) & 0x0f; 378 cmd->u.tx_can.data[3] = (cf->can_id >> 6) & 0xff; 379 cmd->u.tx_can.data[4] = cf->can_id & 0x3f; 380 } else { 381 cmd->id = CMD_TX_STD_MESSAGE; 382 cmd->u.tx_can.data[0] = (cf->can_id >> 6) & 0x1f; 383 cmd->u.tx_can.data[1] = cf->can_id & 0x3f; 384 } 385 386 cmd->u.tx_can.data[5] = cf->can_dlc; 387 memcpy(&cmd->u.tx_can.data[6], cf->data, cf->can_dlc); 388 389 if (cf->can_id & CAN_RTR_FLAG) 390 *cmd_tx_can_flags |= MSG_FLAG_REMOTE_FRAME; 391 } 392 return cmd; 393 } 394 395 static int kvaser_usb_leaf_wait_cmd(const struct kvaser_usb *dev, u8 id, 396 struct kvaser_cmd *cmd) 397 { 398 struct kvaser_cmd *tmp; 399 void *buf; 400 int actual_len; 401 int err; 402 int pos; 403 unsigned long to = jiffies + msecs_to_jiffies(KVASER_USB_TIMEOUT); 404 405 buf = kzalloc(KVASER_USB_RX_BUFFER_SIZE, GFP_KERNEL); 406 if (!buf) 407 return -ENOMEM; 408 409 do { 410 err = kvaser_usb_recv_cmd(dev, buf, KVASER_USB_RX_BUFFER_SIZE, 411 &actual_len); 412 if (err < 0) 413 goto end; 414 415 pos = 0; 416 while (pos <= actual_len - CMD_HEADER_LEN) { 417 tmp = buf + pos; 418 419 /* Handle commands crossing the USB endpoint max packet 420 * size boundary. Check kvaser_usb_read_bulk_callback() 421 * for further details. 422 */ 423 if (tmp->len == 0) { 424 pos = round_up(pos, 425 le16_to_cpu 426 (dev->bulk_in->wMaxPacketSize)); 427 continue; 428 } 429 430 if (pos + tmp->len > actual_len) { 431 dev_err_ratelimited(&dev->intf->dev, 432 "Format error\n"); 433 break; 434 } 435 436 if (tmp->id == id) { 437 memcpy(cmd, tmp, tmp->len); 438 goto end; 439 } 440 441 pos += tmp->len; 442 } 443 } while (time_before(jiffies, to)); 444 445 err = -EINVAL; 446 447 end: 448 kfree(buf); 449 450 return err; 451 } 452 453 static int kvaser_usb_leaf_send_simple_cmd(const struct kvaser_usb *dev, 454 u8 cmd_id, int channel) 455 { 456 struct kvaser_cmd *cmd; 457 int rc; 458 459 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 460 if (!cmd) 461 return -ENOMEM; 462 463 cmd->id = cmd_id; 464 cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_simple); 465 cmd->u.simple.channel = channel; 466 cmd->u.simple.tid = 0xff; 467 468 rc = kvaser_usb_send_cmd(dev, cmd, cmd->len); 469 470 kfree(cmd); 471 return rc; 472 } 473 474 static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev) 475 { 476 struct kvaser_cmd cmd; 477 int err; 478 479 err = kvaser_usb_leaf_send_simple_cmd(dev, CMD_GET_SOFTWARE_INFO, 0); 480 if (err) 481 return err; 482 483 err = kvaser_usb_leaf_wait_cmd(dev, CMD_GET_SOFTWARE_INFO_REPLY, &cmd); 484 if (err) 485 return err; 486 487 switch (dev->card_data.leaf.family) { 488 case KVASER_LEAF: 489 dev->fw_version = le32_to_cpu(cmd.u.leaf.softinfo.fw_version); 490 dev->max_tx_urbs = 491 le16_to_cpu(cmd.u.leaf.softinfo.max_outstanding_tx); 492 break; 493 case KVASER_USBCAN: 494 dev->fw_version = le32_to_cpu(cmd.u.usbcan.softinfo.fw_version); 495 dev->max_tx_urbs = 496 le16_to_cpu(cmd.u.usbcan.softinfo.max_outstanding_tx); 497 break; 498 } 499 500 return 0; 501 } 502 503 static int kvaser_usb_leaf_get_software_info(struct kvaser_usb *dev) 504 { 505 int err; 506 int retry = 3; 507 508 /* On some x86 laptops, plugging a Kvaser device again after 509 * an unplug makes the firmware always ignore the very first 510 * command. For such a case, provide some room for retries 511 * instead of completely exiting the driver. 512 */ 513 do { 514 err = kvaser_usb_leaf_get_software_info_inner(dev); 515 } while (--retry && err == -ETIMEDOUT); 516 517 return err; 518 } 519 520 static int kvaser_usb_leaf_get_card_info(struct kvaser_usb *dev) 521 { 522 struct kvaser_cmd cmd; 523 int err; 524 525 err = kvaser_usb_leaf_send_simple_cmd(dev, CMD_GET_CARD_INFO, 0); 526 if (err) 527 return err; 528 529 err = kvaser_usb_leaf_wait_cmd(dev, CMD_GET_CARD_INFO_REPLY, &cmd); 530 if (err) 531 return err; 532 533 dev->nchannels = cmd.u.cardinfo.nchannels; 534 if (dev->nchannels > KVASER_USB_MAX_NET_DEVICES || 535 (dev->card_data.leaf.family == KVASER_USBCAN && 536 dev->nchannels > MAX_USBCAN_NET_DEVICES)) 537 return -EINVAL; 538 539 return 0; 540 } 541 542 static void kvaser_usb_leaf_tx_acknowledge(const struct kvaser_usb *dev, 543 const struct kvaser_cmd *cmd) 544 { 545 struct net_device_stats *stats; 546 struct kvaser_usb_tx_urb_context *context; 547 struct kvaser_usb_net_priv *priv; 548 unsigned long flags; 549 u8 channel, tid; 550 551 channel = cmd->u.tx_acknowledge_header.channel; 552 tid = cmd->u.tx_acknowledge_header.tid; 553 554 if (channel >= dev->nchannels) { 555 dev_err(&dev->intf->dev, 556 "Invalid channel number (%d)\n", channel); 557 return; 558 } 559 560 priv = dev->nets[channel]; 561 562 if (!netif_device_present(priv->netdev)) 563 return; 564 565 stats = &priv->netdev->stats; 566 567 context = &priv->tx_contexts[tid % dev->max_tx_urbs]; 568 569 /* Sometimes the state change doesn't come after a bus-off event */ 570 if (priv->can.restart_ms && priv->can.state >= CAN_STATE_BUS_OFF) { 571 struct sk_buff *skb; 572 struct can_frame *cf; 573 574 skb = alloc_can_err_skb(priv->netdev, &cf); 575 if (skb) { 576 cf->can_id |= CAN_ERR_RESTARTED; 577 578 stats->rx_packets++; 579 stats->rx_bytes += cf->can_dlc; 580 netif_rx(skb); 581 } else { 582 netdev_err(priv->netdev, 583 "No memory left for err_skb\n"); 584 } 585 586 priv->can.can_stats.restarts++; 587 netif_carrier_on(priv->netdev); 588 589 priv->can.state = CAN_STATE_ERROR_ACTIVE; 590 } 591 592 stats->tx_packets++; 593 stats->tx_bytes += context->dlc; 594 595 spin_lock_irqsave(&priv->tx_contexts_lock, flags); 596 597 can_get_echo_skb(priv->netdev, context->echo_index); 598 context->echo_index = dev->max_tx_urbs; 599 --priv->active_tx_contexts; 600 netif_wake_queue(priv->netdev); 601 602 spin_unlock_irqrestore(&priv->tx_contexts_lock, flags); 603 } 604 605 static int kvaser_usb_leaf_simple_cmd_async(struct kvaser_usb_net_priv *priv, 606 u8 cmd_id) 607 { 608 struct kvaser_cmd *cmd; 609 int err; 610 611 cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC); 612 if (!cmd) 613 return -ENOMEM; 614 615 cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_simple); 616 cmd->id = cmd_id; 617 cmd->u.simple.channel = priv->channel; 618 619 err = kvaser_usb_send_cmd_async(priv, cmd, cmd->len); 620 if (err) 621 kfree(cmd); 622 623 return err; 624 } 625 626 static void 627 kvaser_usb_leaf_rx_error_update_can_state(struct kvaser_usb_net_priv *priv, 628 const struct kvaser_usb_err_summary *es, 629 struct can_frame *cf) 630 { 631 struct kvaser_usb *dev = priv->dev; 632 struct net_device_stats *stats = &priv->netdev->stats; 633 enum can_state cur_state, new_state, tx_state, rx_state; 634 635 netdev_dbg(priv->netdev, "Error status: 0x%02x\n", es->status); 636 637 new_state = priv->can.state; 638 cur_state = priv->can.state; 639 640 if (es->status & (M16C_STATE_BUS_OFF | M16C_STATE_BUS_RESET)) { 641 new_state = CAN_STATE_BUS_OFF; 642 } else if (es->status & M16C_STATE_BUS_PASSIVE) { 643 new_state = CAN_STATE_ERROR_PASSIVE; 644 } else if (es->status & M16C_STATE_BUS_ERROR) { 645 /* Guard against spurious error events after a busoff */ 646 if (cur_state < CAN_STATE_BUS_OFF) { 647 if (es->txerr >= 128 || es->rxerr >= 128) 648 new_state = CAN_STATE_ERROR_PASSIVE; 649 else if (es->txerr >= 96 || es->rxerr >= 96) 650 new_state = CAN_STATE_ERROR_WARNING; 651 else if (cur_state > CAN_STATE_ERROR_ACTIVE) 652 new_state = CAN_STATE_ERROR_ACTIVE; 653 } 654 } 655 656 if (!es->status) 657 new_state = CAN_STATE_ERROR_ACTIVE; 658 659 if (new_state != cur_state) { 660 tx_state = (es->txerr >= es->rxerr) ? new_state : 0; 661 rx_state = (es->txerr <= es->rxerr) ? new_state : 0; 662 663 can_change_state(priv->netdev, cf, tx_state, rx_state); 664 } 665 666 if (priv->can.restart_ms && 667 cur_state >= CAN_STATE_BUS_OFF && 668 new_state < CAN_STATE_BUS_OFF) 669 priv->can.can_stats.restarts++; 670 671 switch (dev->card_data.leaf.family) { 672 case KVASER_LEAF: 673 if (es->leaf.error_factor) { 674 priv->can.can_stats.bus_error++; 675 stats->rx_errors++; 676 } 677 break; 678 case KVASER_USBCAN: 679 if (es->usbcan.error_state & USBCAN_ERROR_STATE_TX_ERROR) 680 stats->tx_errors++; 681 if (es->usbcan.error_state & USBCAN_ERROR_STATE_RX_ERROR) 682 stats->rx_errors++; 683 if (es->usbcan.error_state & USBCAN_ERROR_STATE_BUSERROR) 684 priv->can.can_stats.bus_error++; 685 break; 686 } 687 688 priv->bec.txerr = es->txerr; 689 priv->bec.rxerr = es->rxerr; 690 } 691 692 static void kvaser_usb_leaf_rx_error(const struct kvaser_usb *dev, 693 const struct kvaser_usb_err_summary *es) 694 { 695 struct can_frame *cf; 696 struct can_frame tmp_cf = { .can_id = CAN_ERR_FLAG, 697 .can_dlc = CAN_ERR_DLC }; 698 struct sk_buff *skb; 699 struct net_device_stats *stats; 700 struct kvaser_usb_net_priv *priv; 701 enum can_state old_state, new_state; 702 703 if (es->channel >= dev->nchannels) { 704 dev_err(&dev->intf->dev, 705 "Invalid channel number (%d)\n", es->channel); 706 return; 707 } 708 709 priv = dev->nets[es->channel]; 710 stats = &priv->netdev->stats; 711 712 /* Update all of the CAN interface's state and error counters before 713 * trying any memory allocation that can actually fail with -ENOMEM. 714 * 715 * We send a temporary stack-allocated error CAN frame to 716 * can_change_state() for the very same reason. 717 * 718 * TODO: Split can_change_state() responsibility between updating the 719 * CAN interface's state and counters, and the setting up of CAN error 720 * frame ID and data to userspace. Remove stack allocation afterwards. 721 */ 722 old_state = priv->can.state; 723 kvaser_usb_leaf_rx_error_update_can_state(priv, es, &tmp_cf); 724 new_state = priv->can.state; 725 726 skb = alloc_can_err_skb(priv->netdev, &cf); 727 if (!skb) { 728 stats->rx_dropped++; 729 return; 730 } 731 memcpy(cf, &tmp_cf, sizeof(*cf)); 732 733 if (new_state != old_state) { 734 if (es->status & 735 (M16C_STATE_BUS_OFF | M16C_STATE_BUS_RESET)) { 736 if (!priv->can.restart_ms) 737 kvaser_usb_leaf_simple_cmd_async(priv, 738 CMD_STOP_CHIP); 739 netif_carrier_off(priv->netdev); 740 } 741 742 if (priv->can.restart_ms && 743 old_state >= CAN_STATE_BUS_OFF && 744 new_state < CAN_STATE_BUS_OFF) { 745 cf->can_id |= CAN_ERR_RESTARTED; 746 netif_carrier_on(priv->netdev); 747 } 748 } 749 750 switch (dev->card_data.leaf.family) { 751 case KVASER_LEAF: 752 if (es->leaf.error_factor) { 753 cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_PROT; 754 755 if (es->leaf.error_factor & M16C_EF_ACKE) 756 cf->data[3] = CAN_ERR_PROT_LOC_ACK; 757 if (es->leaf.error_factor & M16C_EF_CRCE) 758 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ; 759 if (es->leaf.error_factor & M16C_EF_FORME) 760 cf->data[2] |= CAN_ERR_PROT_FORM; 761 if (es->leaf.error_factor & M16C_EF_STFE) 762 cf->data[2] |= CAN_ERR_PROT_STUFF; 763 if (es->leaf.error_factor & M16C_EF_BITE0) 764 cf->data[2] |= CAN_ERR_PROT_BIT0; 765 if (es->leaf.error_factor & M16C_EF_BITE1) 766 cf->data[2] |= CAN_ERR_PROT_BIT1; 767 if (es->leaf.error_factor & M16C_EF_TRE) 768 cf->data[2] |= CAN_ERR_PROT_TX; 769 } 770 break; 771 case KVASER_USBCAN: 772 if (es->usbcan.error_state & USBCAN_ERROR_STATE_BUSERROR) 773 cf->can_id |= CAN_ERR_BUSERROR; 774 break; 775 } 776 777 cf->data[6] = es->txerr; 778 cf->data[7] = es->rxerr; 779 780 stats->rx_packets++; 781 stats->rx_bytes += cf->can_dlc; 782 netif_rx(skb); 783 } 784 785 /* For USBCAN, report error to userspace if the channels's errors counter 786 * has changed, or we're the only channel seeing a bus error state. 787 */ 788 static void 789 kvaser_usb_leaf_usbcan_conditionally_rx_error(const struct kvaser_usb *dev, 790 struct kvaser_usb_err_summary *es) 791 { 792 struct kvaser_usb_net_priv *priv; 793 unsigned int channel; 794 bool report_error; 795 796 channel = es->channel; 797 if (channel >= dev->nchannels) { 798 dev_err(&dev->intf->dev, 799 "Invalid channel number (%d)\n", channel); 800 return; 801 } 802 803 priv = dev->nets[channel]; 804 report_error = false; 805 806 if (es->txerr != priv->bec.txerr) { 807 es->usbcan.error_state |= USBCAN_ERROR_STATE_TX_ERROR; 808 report_error = true; 809 } 810 if (es->rxerr != priv->bec.rxerr) { 811 es->usbcan.error_state |= USBCAN_ERROR_STATE_RX_ERROR; 812 report_error = true; 813 } 814 if ((es->status & M16C_STATE_BUS_ERROR) && 815 !(es->usbcan.other_ch_status & M16C_STATE_BUS_ERROR)) { 816 es->usbcan.error_state |= USBCAN_ERROR_STATE_BUSERROR; 817 report_error = true; 818 } 819 820 if (report_error) 821 kvaser_usb_leaf_rx_error(dev, es); 822 } 823 824 static void kvaser_usb_leaf_usbcan_rx_error(const struct kvaser_usb *dev, 825 const struct kvaser_cmd *cmd) 826 { 827 struct kvaser_usb_err_summary es = { }; 828 829 switch (cmd->id) { 830 /* Sometimes errors are sent as unsolicited chip state events */ 831 case CMD_CHIP_STATE_EVENT: 832 es.channel = cmd->u.usbcan.chip_state_event.channel; 833 es.status = cmd->u.usbcan.chip_state_event.status; 834 es.txerr = cmd->u.usbcan.chip_state_event.tx_errors_count; 835 es.rxerr = cmd->u.usbcan.chip_state_event.rx_errors_count; 836 kvaser_usb_leaf_usbcan_conditionally_rx_error(dev, &es); 837 break; 838 839 case CMD_CAN_ERROR_EVENT: 840 es.channel = 0; 841 es.status = cmd->u.usbcan.error_event.status_ch0; 842 es.txerr = cmd->u.usbcan.error_event.tx_errors_count_ch0; 843 es.rxerr = cmd->u.usbcan.error_event.rx_errors_count_ch0; 844 es.usbcan.other_ch_status = 845 cmd->u.usbcan.error_event.status_ch1; 846 kvaser_usb_leaf_usbcan_conditionally_rx_error(dev, &es); 847 848 /* The USBCAN firmware supports up to 2 channels. 849 * Now that ch0 was checked, check if ch1 has any errors. 850 */ 851 if (dev->nchannels == MAX_USBCAN_NET_DEVICES) { 852 es.channel = 1; 853 es.status = cmd->u.usbcan.error_event.status_ch1; 854 es.txerr = 855 cmd->u.usbcan.error_event.tx_errors_count_ch1; 856 es.rxerr = 857 cmd->u.usbcan.error_event.rx_errors_count_ch1; 858 es.usbcan.other_ch_status = 859 cmd->u.usbcan.error_event.status_ch0; 860 kvaser_usb_leaf_usbcan_conditionally_rx_error(dev, &es); 861 } 862 break; 863 864 default: 865 dev_err(&dev->intf->dev, "Invalid cmd id (%d)\n", cmd->id); 866 } 867 } 868 869 static void kvaser_usb_leaf_leaf_rx_error(const struct kvaser_usb *dev, 870 const struct kvaser_cmd *cmd) 871 { 872 struct kvaser_usb_err_summary es = { }; 873 874 switch (cmd->id) { 875 case CMD_CAN_ERROR_EVENT: 876 es.channel = cmd->u.leaf.error_event.channel; 877 es.status = cmd->u.leaf.error_event.status; 878 es.txerr = cmd->u.leaf.error_event.tx_errors_count; 879 es.rxerr = cmd->u.leaf.error_event.rx_errors_count; 880 es.leaf.error_factor = cmd->u.leaf.error_event.error_factor; 881 break; 882 case CMD_LEAF_LOG_MESSAGE: 883 es.channel = cmd->u.leaf.log_message.channel; 884 es.status = cmd->u.leaf.log_message.data[0]; 885 es.txerr = cmd->u.leaf.log_message.data[2]; 886 es.rxerr = cmd->u.leaf.log_message.data[3]; 887 es.leaf.error_factor = cmd->u.leaf.log_message.data[1]; 888 break; 889 case CMD_CHIP_STATE_EVENT: 890 es.channel = cmd->u.leaf.chip_state_event.channel; 891 es.status = cmd->u.leaf.chip_state_event.status; 892 es.txerr = cmd->u.leaf.chip_state_event.tx_errors_count; 893 es.rxerr = cmd->u.leaf.chip_state_event.rx_errors_count; 894 es.leaf.error_factor = 0; 895 break; 896 default: 897 dev_err(&dev->intf->dev, "Invalid cmd id (%d)\n", cmd->id); 898 return; 899 } 900 901 kvaser_usb_leaf_rx_error(dev, &es); 902 } 903 904 static void kvaser_usb_leaf_rx_can_err(const struct kvaser_usb_net_priv *priv, 905 const struct kvaser_cmd *cmd) 906 { 907 if (cmd->u.rx_can_header.flag & (MSG_FLAG_ERROR_FRAME | 908 MSG_FLAG_NERR)) { 909 struct net_device_stats *stats = &priv->netdev->stats; 910 911 netdev_err(priv->netdev, "Unknown error (flags: 0x%02x)\n", 912 cmd->u.rx_can_header.flag); 913 914 stats->rx_errors++; 915 return; 916 } 917 918 if (cmd->u.rx_can_header.flag & MSG_FLAG_OVERRUN) 919 kvaser_usb_can_rx_over_error(priv->netdev); 920 } 921 922 static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev, 923 const struct kvaser_cmd *cmd) 924 { 925 struct kvaser_usb_net_priv *priv; 926 struct can_frame *cf; 927 struct sk_buff *skb; 928 struct net_device_stats *stats; 929 u8 channel = cmd->u.rx_can_header.channel; 930 const u8 *rx_data = NULL; /* GCC */ 931 932 if (channel >= dev->nchannels) { 933 dev_err(&dev->intf->dev, 934 "Invalid channel number (%d)\n", channel); 935 return; 936 } 937 938 priv = dev->nets[channel]; 939 stats = &priv->netdev->stats; 940 941 if ((cmd->u.rx_can_header.flag & MSG_FLAG_ERROR_FRAME) && 942 (dev->card_data.leaf.family == KVASER_LEAF && 943 cmd->id == CMD_LEAF_LOG_MESSAGE)) { 944 kvaser_usb_leaf_leaf_rx_error(dev, cmd); 945 return; 946 } else if (cmd->u.rx_can_header.flag & (MSG_FLAG_ERROR_FRAME | 947 MSG_FLAG_NERR | 948 MSG_FLAG_OVERRUN)) { 949 kvaser_usb_leaf_rx_can_err(priv, cmd); 950 return; 951 } else if (cmd->u.rx_can_header.flag & ~MSG_FLAG_REMOTE_FRAME) { 952 netdev_warn(priv->netdev, 953 "Unhandled frame (flags: 0x%02x)\n", 954 cmd->u.rx_can_header.flag); 955 return; 956 } 957 958 switch (dev->card_data.leaf.family) { 959 case KVASER_LEAF: 960 rx_data = cmd->u.leaf.rx_can.data; 961 break; 962 case KVASER_USBCAN: 963 rx_data = cmd->u.usbcan.rx_can.data; 964 break; 965 } 966 967 skb = alloc_can_skb(priv->netdev, &cf); 968 if (!skb) { 969 stats->rx_dropped++; 970 return; 971 } 972 973 if (dev->card_data.leaf.family == KVASER_LEAF && cmd->id == 974 CMD_LEAF_LOG_MESSAGE) { 975 cf->can_id = le32_to_cpu(cmd->u.leaf.log_message.id); 976 if (cf->can_id & KVASER_EXTENDED_FRAME) 977 cf->can_id &= CAN_EFF_MASK | CAN_EFF_FLAG; 978 else 979 cf->can_id &= CAN_SFF_MASK; 980 981 cf->can_dlc = get_can_dlc(cmd->u.leaf.log_message.dlc); 982 983 if (cmd->u.leaf.log_message.flags & MSG_FLAG_REMOTE_FRAME) 984 cf->can_id |= CAN_RTR_FLAG; 985 else 986 memcpy(cf->data, &cmd->u.leaf.log_message.data, 987 cf->can_dlc); 988 } else { 989 cf->can_id = ((rx_data[0] & 0x1f) << 6) | (rx_data[1] & 0x3f); 990 991 if (cmd->id == CMD_RX_EXT_MESSAGE) { 992 cf->can_id <<= 18; 993 cf->can_id |= ((rx_data[2] & 0x0f) << 14) | 994 ((rx_data[3] & 0xff) << 6) | 995 (rx_data[4] & 0x3f); 996 cf->can_id |= CAN_EFF_FLAG; 997 } 998 999 cf->can_dlc = get_can_dlc(rx_data[5]); 1000 1001 if (cmd->u.rx_can_header.flag & MSG_FLAG_REMOTE_FRAME) 1002 cf->can_id |= CAN_RTR_FLAG; 1003 else 1004 memcpy(cf->data, &rx_data[6], cf->can_dlc); 1005 } 1006 1007 stats->rx_packets++; 1008 stats->rx_bytes += cf->can_dlc; 1009 netif_rx(skb); 1010 } 1011 1012 static void kvaser_usb_leaf_start_chip_reply(const struct kvaser_usb *dev, 1013 const struct kvaser_cmd *cmd) 1014 { 1015 struct kvaser_usb_net_priv *priv; 1016 u8 channel = cmd->u.simple.channel; 1017 1018 if (channel >= dev->nchannels) { 1019 dev_err(&dev->intf->dev, 1020 "Invalid channel number (%d)\n", channel); 1021 return; 1022 } 1023 1024 priv = dev->nets[channel]; 1025 1026 if (completion_done(&priv->start_comp) && 1027 netif_queue_stopped(priv->netdev)) { 1028 netif_wake_queue(priv->netdev); 1029 } else { 1030 netif_start_queue(priv->netdev); 1031 complete(&priv->start_comp); 1032 } 1033 } 1034 1035 static void kvaser_usb_leaf_stop_chip_reply(const struct kvaser_usb *dev, 1036 const struct kvaser_cmd *cmd) 1037 { 1038 struct kvaser_usb_net_priv *priv; 1039 u8 channel = cmd->u.simple.channel; 1040 1041 if (channel >= dev->nchannels) { 1042 dev_err(&dev->intf->dev, 1043 "Invalid channel number (%d)\n", channel); 1044 return; 1045 } 1046 1047 priv = dev->nets[channel]; 1048 1049 complete(&priv->stop_comp); 1050 } 1051 1052 static void kvaser_usb_leaf_handle_command(const struct kvaser_usb *dev, 1053 const struct kvaser_cmd *cmd) 1054 { 1055 switch (cmd->id) { 1056 case CMD_START_CHIP_REPLY: 1057 kvaser_usb_leaf_start_chip_reply(dev, cmd); 1058 break; 1059 1060 case CMD_STOP_CHIP_REPLY: 1061 kvaser_usb_leaf_stop_chip_reply(dev, cmd); 1062 break; 1063 1064 case CMD_RX_STD_MESSAGE: 1065 case CMD_RX_EXT_MESSAGE: 1066 kvaser_usb_leaf_rx_can_msg(dev, cmd); 1067 break; 1068 1069 case CMD_LEAF_LOG_MESSAGE: 1070 if (dev->card_data.leaf.family != KVASER_LEAF) 1071 goto warn; 1072 kvaser_usb_leaf_rx_can_msg(dev, cmd); 1073 break; 1074 1075 case CMD_CHIP_STATE_EVENT: 1076 case CMD_CAN_ERROR_EVENT: 1077 if (dev->card_data.leaf.family == KVASER_LEAF) 1078 kvaser_usb_leaf_leaf_rx_error(dev, cmd); 1079 else 1080 kvaser_usb_leaf_usbcan_rx_error(dev, cmd); 1081 break; 1082 1083 case CMD_TX_ACKNOWLEDGE: 1084 kvaser_usb_leaf_tx_acknowledge(dev, cmd); 1085 break; 1086 1087 /* Ignored commands */ 1088 case CMD_USBCAN_CLOCK_OVERFLOW_EVENT: 1089 if (dev->card_data.leaf.family != KVASER_USBCAN) 1090 goto warn; 1091 break; 1092 1093 case CMD_FLUSH_QUEUE_REPLY: 1094 if (dev->card_data.leaf.family != KVASER_LEAF) 1095 goto warn; 1096 break; 1097 1098 default: 1099 warn: dev_warn(&dev->intf->dev, "Unhandled command (%d)\n", cmd->id); 1100 break; 1101 } 1102 } 1103 1104 static void kvaser_usb_leaf_read_bulk_callback(struct kvaser_usb *dev, 1105 void *buf, int len) 1106 { 1107 struct kvaser_cmd *cmd; 1108 int pos = 0; 1109 1110 while (pos <= len - CMD_HEADER_LEN) { 1111 cmd = buf + pos; 1112 1113 /* The Kvaser firmware can only read and write commands that 1114 * does not cross the USB's endpoint wMaxPacketSize boundary. 1115 * If a follow-up command crosses such boundary, firmware puts 1116 * a placeholder zero-length command in its place then aligns 1117 * the real command to the next max packet size. 1118 * 1119 * Handle such cases or we're going to miss a significant 1120 * number of events in case of a heavy rx load on the bus. 1121 */ 1122 if (cmd->len == 0) { 1123 pos = round_up(pos, le16_to_cpu 1124 (dev->bulk_in->wMaxPacketSize)); 1125 continue; 1126 } 1127 1128 if (pos + cmd->len > len) { 1129 dev_err_ratelimited(&dev->intf->dev, "Format error\n"); 1130 break; 1131 } 1132 1133 kvaser_usb_leaf_handle_command(dev, cmd); 1134 pos += cmd->len; 1135 } 1136 } 1137 1138 static int kvaser_usb_leaf_set_opt_mode(const struct kvaser_usb_net_priv *priv) 1139 { 1140 struct kvaser_cmd *cmd; 1141 int rc; 1142 1143 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 1144 if (!cmd) 1145 return -ENOMEM; 1146 1147 cmd->id = CMD_SET_CTRL_MODE; 1148 cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_ctrl_mode); 1149 cmd->u.ctrl_mode.tid = 0xff; 1150 cmd->u.ctrl_mode.channel = priv->channel; 1151 1152 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) 1153 cmd->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_SILENT; 1154 else 1155 cmd->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_NORMAL; 1156 1157 rc = kvaser_usb_send_cmd(priv->dev, cmd, cmd->len); 1158 1159 kfree(cmd); 1160 return rc; 1161 } 1162 1163 static int kvaser_usb_leaf_start_chip(struct kvaser_usb_net_priv *priv) 1164 { 1165 int err; 1166 1167 init_completion(&priv->start_comp); 1168 1169 err = kvaser_usb_leaf_send_simple_cmd(priv->dev, CMD_START_CHIP, 1170 priv->channel); 1171 if (err) 1172 return err; 1173 1174 if (!wait_for_completion_timeout(&priv->start_comp, 1175 msecs_to_jiffies(KVASER_USB_TIMEOUT))) 1176 return -ETIMEDOUT; 1177 1178 return 0; 1179 } 1180 1181 static int kvaser_usb_leaf_stop_chip(struct kvaser_usb_net_priv *priv) 1182 { 1183 int err; 1184 1185 init_completion(&priv->stop_comp); 1186 1187 err = kvaser_usb_leaf_send_simple_cmd(priv->dev, CMD_STOP_CHIP, 1188 priv->channel); 1189 if (err) 1190 return err; 1191 1192 if (!wait_for_completion_timeout(&priv->stop_comp, 1193 msecs_to_jiffies(KVASER_USB_TIMEOUT))) 1194 return -ETIMEDOUT; 1195 1196 return 0; 1197 } 1198 1199 static int kvaser_usb_leaf_reset_chip(struct kvaser_usb *dev, int channel) 1200 { 1201 return kvaser_usb_leaf_send_simple_cmd(dev, CMD_RESET_CHIP, channel); 1202 } 1203 1204 static int kvaser_usb_leaf_flush_queue(struct kvaser_usb_net_priv *priv) 1205 { 1206 struct kvaser_cmd *cmd; 1207 int rc; 1208 1209 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 1210 if (!cmd) 1211 return -ENOMEM; 1212 1213 cmd->id = CMD_FLUSH_QUEUE; 1214 cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_flush_queue); 1215 cmd->u.flush_queue.channel = priv->channel; 1216 cmd->u.flush_queue.flags = 0x00; 1217 1218 rc = kvaser_usb_send_cmd(priv->dev, cmd, cmd->len); 1219 1220 kfree(cmd); 1221 return rc; 1222 } 1223 1224 static int kvaser_usb_leaf_init_card(struct kvaser_usb *dev) 1225 { 1226 struct kvaser_usb_dev_card_data *card_data = &dev->card_data; 1227 1228 dev->cfg = &kvaser_usb_leaf_dev_cfg; 1229 card_data->ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES; 1230 1231 return 0; 1232 } 1233 1234 static const struct can_bittiming_const kvaser_usb_leaf_bittiming_const = { 1235 .name = "kvaser_usb", 1236 .tseg1_min = KVASER_USB_TSEG1_MIN, 1237 .tseg1_max = KVASER_USB_TSEG1_MAX, 1238 .tseg2_min = KVASER_USB_TSEG2_MIN, 1239 .tseg2_max = KVASER_USB_TSEG2_MAX, 1240 .sjw_max = KVASER_USB_SJW_MAX, 1241 .brp_min = KVASER_USB_BRP_MIN, 1242 .brp_max = KVASER_USB_BRP_MAX, 1243 .brp_inc = KVASER_USB_BRP_INC, 1244 }; 1245 1246 static int kvaser_usb_leaf_set_bittiming(struct net_device *netdev) 1247 { 1248 struct kvaser_usb_net_priv *priv = netdev_priv(netdev); 1249 struct can_bittiming *bt = &priv->can.bittiming; 1250 struct kvaser_usb *dev = priv->dev; 1251 struct kvaser_cmd *cmd; 1252 int rc; 1253 1254 cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 1255 if (!cmd) 1256 return -ENOMEM; 1257 1258 cmd->id = CMD_SET_BUS_PARAMS; 1259 cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_busparams); 1260 cmd->u.busparams.channel = priv->channel; 1261 cmd->u.busparams.tid = 0xff; 1262 cmd->u.busparams.bitrate = cpu_to_le32(bt->bitrate); 1263 cmd->u.busparams.sjw = bt->sjw; 1264 cmd->u.busparams.tseg1 = bt->prop_seg + bt->phase_seg1; 1265 cmd->u.busparams.tseg2 = bt->phase_seg2; 1266 1267 if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) 1268 cmd->u.busparams.no_samp = 3; 1269 else 1270 cmd->u.busparams.no_samp = 1; 1271 1272 rc = kvaser_usb_send_cmd(dev, cmd, cmd->len); 1273 1274 kfree(cmd); 1275 return rc; 1276 } 1277 1278 static int kvaser_usb_leaf_set_mode(struct net_device *netdev, 1279 enum can_mode mode) 1280 { 1281 struct kvaser_usb_net_priv *priv = netdev_priv(netdev); 1282 int err; 1283 1284 switch (mode) { 1285 case CAN_MODE_START: 1286 err = kvaser_usb_leaf_simple_cmd_async(priv, CMD_START_CHIP); 1287 if (err) 1288 return err; 1289 break; 1290 default: 1291 return -EOPNOTSUPP; 1292 } 1293 1294 return 0; 1295 } 1296 1297 static int kvaser_usb_leaf_get_berr_counter(const struct net_device *netdev, 1298 struct can_berr_counter *bec) 1299 { 1300 struct kvaser_usb_net_priv *priv = netdev_priv(netdev); 1301 1302 *bec = priv->bec; 1303 1304 return 0; 1305 } 1306 1307 static int kvaser_usb_leaf_setup_endpoints(struct kvaser_usb *dev) 1308 { 1309 const struct usb_host_interface *iface_desc; 1310 struct usb_endpoint_descriptor *endpoint; 1311 int i; 1312 1313 iface_desc = &dev->intf->altsetting[0]; 1314 1315 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { 1316 endpoint = &iface_desc->endpoint[i].desc; 1317 1318 if (!dev->bulk_in && usb_endpoint_is_bulk_in(endpoint)) 1319 dev->bulk_in = endpoint; 1320 1321 if (!dev->bulk_out && usb_endpoint_is_bulk_out(endpoint)) 1322 dev->bulk_out = endpoint; 1323 1324 /* use first bulk endpoint for in and out */ 1325 if (dev->bulk_in && dev->bulk_out) 1326 return 0; 1327 } 1328 1329 return -ENODEV; 1330 } 1331 1332 const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops = { 1333 .dev_set_mode = kvaser_usb_leaf_set_mode, 1334 .dev_set_bittiming = kvaser_usb_leaf_set_bittiming, 1335 .dev_set_data_bittiming = NULL, 1336 .dev_get_berr_counter = kvaser_usb_leaf_get_berr_counter, 1337 .dev_setup_endpoints = kvaser_usb_leaf_setup_endpoints, 1338 .dev_init_card = kvaser_usb_leaf_init_card, 1339 .dev_get_software_info = kvaser_usb_leaf_get_software_info, 1340 .dev_get_software_details = NULL, 1341 .dev_get_card_info = kvaser_usb_leaf_get_card_info, 1342 .dev_get_capabilities = NULL, 1343 .dev_set_opt_mode = kvaser_usb_leaf_set_opt_mode, 1344 .dev_start_chip = kvaser_usb_leaf_start_chip, 1345 .dev_stop_chip = kvaser_usb_leaf_stop_chip, 1346 .dev_reset_chip = kvaser_usb_leaf_reset_chip, 1347 .dev_flush_queue = kvaser_usb_leaf_flush_queue, 1348 .dev_read_bulk_callback = kvaser_usb_leaf_read_bulk_callback, 1349 .dev_frame_to_cmd = kvaser_usb_leaf_frame_to_cmd, 1350 }; 1351 1352 static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg = { 1353 .clock = { 1354 .freq = CAN_USB_CLOCK, 1355 }, 1356 .timestamp_freq = 1, 1357 .bittiming_const = &kvaser_usb_leaf_bittiming_const, 1358 }; 1359