FILE
pcan_usb_core.c
File preview with syntax highlighting.
linux-6.19.14/drivers/net/can/usb/peak_usb/pcan_usb_core.c
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * CAN driver for PEAK System USB adapters 4 * Derived from the PCAN project file driver/src/pcan_usb_core.c 5 * 6 * Copyright (C) 2003-2025 PEAK System-Technik GmbH 7 * Author: Stéphane Grosjean <stephane.grosjean@hms-networks.com> 8 * 9 * Many thanks to Klaus Hitschler <klaus.hitschler@gmx.de> 10 */ 11#include <linux/device.h> 12#include <linux/ethtool.h> 13#include <linux/init.h> 14#include <linux/module.h> 15#include <linux/netdevice.h> 16#include <linux/signal.h> 17#include <linux/slab.h> 18#include <linux/sysfs.h> 19#include <linux/usb.h> 20 21#include <linux/can.h> 22#include <linux/can/dev.h> 23#include <linux/can/error.h> 24 25#include "pcan_usb_core.h" 26 27MODULE_AUTHOR("Stéphane Grosjean <stephane.grosjean@hms-networks.com>"); 28MODULE_DESCRIPTION("CAN driver for PEAK-System USB adapters"); 29MODULE_LICENSE("GPL v2"); 30 31/* Table of devices that work with this driver */ 32static const struct usb_device_id peak_usb_table[] = { 33 { 34 USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USB_PRODUCT_ID), 35 .driver_info = (kernel_ulong_t)&pcan_usb, 36 }, { 37 USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USBPRO_PRODUCT_ID), 38 .driver_info = (kernel_ulong_t)&pcan_usb_pro, 39 }, { 40 USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USBFD_PRODUCT_ID), 41 .driver_info = (kernel_ulong_t)&pcan_usb_fd, 42 }, { 43 USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USBPROFD_PRODUCT_ID), 44 .driver_info = (kernel_ulong_t)&pcan_usb_pro_fd, 45 }, { 46 USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USBCHIP_PRODUCT_ID), 47 .driver_info = (kernel_ulong_t)&pcan_usb_chip, 48 }, { 49 USB_DEVICE(PCAN_USB_VENDOR_ID, PCAN_USBX6_PRODUCT_ID), 50 .driver_info = (kernel_ulong_t)&pcan_usb_x6, 51 }, { 52 /* Terminating entry */ 53 } 54}; 55 56MODULE_DEVICE_TABLE(usb, peak_usb_table); 57 58static ssize_t can_channel_id_show(struct device *dev, struct device_attribute *attr, char *buf) 59{ 60 struct net_device *netdev = to_net_dev(dev); 61 struct peak_usb_device *peak_dev = netdev_priv(netdev); 62 63 return sysfs_emit(buf, "%08X\n", peak_dev->can_channel_id); 64} 65static DEVICE_ATTR_RO(can_channel_id); 66 67/* mutable to avoid cast in attribute_group */ 68static struct attribute *peak_usb_sysfs_attrs[] = { 69 &dev_attr_can_channel_id.attr, 70 NULL, 71}; 72 73static const struct attribute_group peak_usb_sysfs_group = { 74 .name = "peak_usb", 75 .attrs = peak_usb_sysfs_attrs, 76}; 77 78/* 79 * dump memory 80 */ 81#define DUMP_WIDTH 16 82void pcan_dump_mem(const char *prompt, const void *p, int l) 83{ 84 pr_info("%s dumping %s (%d bytes):\n", 85 PCAN_USB_DRIVER_NAME, prompt ? prompt : "memory", l); 86 print_hex_dump(KERN_INFO, PCAN_USB_DRIVER_NAME " ", DUMP_PREFIX_NONE, 87 DUMP_WIDTH, 1, p, l, false); 88} 89 90/* 91 * initialize a time_ref object with usb adapter own settings 92 */ 93void peak_usb_init_time_ref(struct peak_time_ref *time_ref, 94 const struct peak_usb_adapter *adapter) 95{ 96 if (time_ref) { 97 memset(time_ref, 0, sizeof(struct peak_time_ref)); 98 time_ref->adapter = adapter; 99 } 100} 101 102/* 103 * sometimes, another now may be more recent than current one... 104 */ 105void peak_usb_update_ts_now(struct peak_time_ref *time_ref, u32 ts_now) 106{ 107 time_ref->ts_dev_2 = ts_now; 108 109 /* should wait at least two passes before computing */ 110 if (ktime_to_ns(time_ref->tv_host) > 0) { 111 u32 delta_ts = time_ref->ts_dev_2 - time_ref->ts_dev_1; 112 113 if (time_ref->ts_dev_2 < time_ref->ts_dev_1) 114 delta_ts &= (1ULL << time_ref->adapter->ts_used_bits) - 1; 115 116 time_ref->ts_total += delta_ts; 117 } 118} 119 120/* 121 * register device timestamp as now 122 */ 123void peak_usb_set_ts_now(struct peak_time_ref *time_ref, u32 ts_now) 124{ 125 if (ktime_to_ns(time_ref->tv_host_0) == 0) { 126 /* use monotonic clock to correctly compute further deltas */ 127 time_ref->tv_host_0 = ktime_get(); 128 time_ref->tv_host = ktime_set(0, 0); 129 } else { 130 /* 131 * delta_us should not be >= 2^32 => delta should be < 4294s 132 * handle 32-bits wrapping here: if count of s. reaches 4200, 133 * reset counters and change time base 134 */ 135 if (ktime_to_ns(time_ref->tv_host)) { 136 ktime_t delta = ktime_sub(time_ref->tv_host, 137 time_ref->tv_host_0); 138 if (ktime_to_ns(delta) > (4200ull * NSEC_PER_SEC)) { 139 time_ref->tv_host_0 = time_ref->tv_host; 140 time_ref->ts_total = 0; 141 } 142 } 143 144 time_ref->tv_host = ktime_get(); 145 time_ref->tick_count++; 146 } 147 148 time_ref->ts_dev_1 = time_ref->ts_dev_2; 149 peak_usb_update_ts_now(time_ref, ts_now); 150} 151 152/* 153 * compute time according to current ts and time_ref data 154 */ 155void peak_usb_get_ts_time(struct peak_time_ref *time_ref, u32 ts, ktime_t *time) 156{ 157 /* protect from getting time before setting now */ 158 if (ktime_to_ns(time_ref->tv_host)) { 159 u64 delta_us; 160 s64 delta_ts = 0; 161 162 /* General case: dev_ts_1 < dev_ts_2 < ts, with: 163 * 164 * - dev_ts_1 = previous sync timestamp 165 * - dev_ts_2 = last sync timestamp 166 * - ts = event timestamp 167 * - ts_period = known sync period (theoretical) 168 * ~ dev_ts2 - dev_ts1 169 * *but*: 170 * 171 * - time counters wrap (see adapter->ts_used_bits) 172 * - sometimes, dev_ts_1 < ts < dev_ts2 173 * 174 * "normal" case (sync time counters increase): 175 * must take into account case when ts wraps (tsw) 176 * 177 * < ts_period > < > 178 * | | | 179 * ---+--------+----+-------0-+--+--> 180 * ts_dev_1 | ts_dev_2 | 181 * ts tsw 182 */ 183 if (time_ref->ts_dev_1 < time_ref->ts_dev_2) { 184 /* case when event time (tsw) wraps */ 185 if (ts < time_ref->ts_dev_1) 186 delta_ts = BIT_ULL(time_ref->adapter->ts_used_bits); 187 188 /* Otherwise, sync time counter (ts_dev_2) has wrapped: 189 * handle case when event time (tsn) hasn't. 190 * 191 * < ts_period > < > 192 * | | | 193 * ---+--------+--0-+---------+--+--> 194 * ts_dev_1 | ts_dev_2 | 195 * tsn ts 196 */ 197 } else if (time_ref->ts_dev_1 < ts) { 198 delta_ts = -BIT_ULL(time_ref->adapter->ts_used_bits); 199 } 200 201 /* add delay between last sync and event timestamps */ 202 delta_ts += (signed int)(ts - time_ref->ts_dev_2); 203 204 /* add time from beginning to last sync */ 205 delta_ts += time_ref->ts_total; 206 207 /* convert ticks number into microseconds */ 208 delta_us = delta_ts * time_ref->adapter->us_per_ts_scale; 209 delta_us >>= time_ref->adapter->us_per_ts_shift; 210 211 *time = ktime_add_us(time_ref->tv_host_0, delta_us); 212 } else { 213 *time = ktime_get(); 214 } 215} 216 217/* post received skb with native 64-bit hw timestamp */ 218int peak_usb_netif_rx_64(struct sk_buff *skb, u32 ts_low, u32 ts_high) 219{ 220 struct skb_shared_hwtstamps *hwts = skb_hwtstamps(skb); 221 u64 ns_ts; 222 223 ns_ts = (u64)ts_high << 32 | ts_low; 224 ns_ts *= NSEC_PER_USEC; 225 hwts->hwtstamp = ns_to_ktime(ns_ts); 226 227 return netif_rx(skb); 228} 229 230/* 231 * callback for bulk Rx urb 232 */ 233static void peak_usb_read_bulk_callback(struct urb *urb) 234{ 235 struct peak_usb_device *dev = urb->context; 236 struct net_device *netdev; 237 int err; 238 239 netdev = dev->netdev; 240 241 if (!netif_device_present(netdev)) 242 return; 243 244 /* check reception status */ 245 switch (urb->status) { 246 case 0: 247 /* success */ 248 break; 249 250 case -EILSEQ: 251 case -ENOENT: 252 case -ECONNRESET: 253 case -ESHUTDOWN: 254 return; 255 256 default: 257 if (net_ratelimit()) 258 netdev_err(netdev, 259 "Rx urb aborted (%d)\n", urb->status); 260 goto resubmit_urb; 261 } 262 263 /* protect from any incoming empty msgs */ 264 if ((urb->actual_length > 0) && (dev->adapter->dev_decode_buf)) { 265 /* handle these kinds of msgs only if _start callback called */ 266 if (dev->state & PCAN_USB_STATE_STARTED) { 267 err = dev->adapter->dev_decode_buf(dev, urb); 268 if (err) 269 pcan_dump_mem("received usb message", 270 urb->transfer_buffer, 271 urb->transfer_buffer_length); 272 } 273 } 274 275resubmit_urb: 276 usb_fill_bulk_urb(urb, dev->udev, 277 usb_rcvbulkpipe(dev->udev, dev->ep_msg_in), 278 urb->transfer_buffer, dev->adapter->rx_buffer_size, 279 peak_usb_read_bulk_callback, dev); 280 281 usb_anchor_urb(urb, &dev->rx_submitted); 282 err = usb_submit_urb(urb, GFP_ATOMIC); 283 if (!err) 284 return; 285 286 usb_unanchor_urb(urb); 287 288 if (err == -ENODEV) 289 netif_device_detach(netdev); 290 else 291 netdev_err(netdev, "failed resubmitting read bulk urb: %d\n", 292 err); 293} 294 295/* 296 * callback for bulk Tx urb 297 */ 298static void peak_usb_write_bulk_callback(struct urb *urb) 299{ 300 struct peak_tx_urb_context *context = urb->context; 301 struct peak_usb_device *dev; 302 struct net_device *netdev; 303 int tx_bytes; 304 305 BUG_ON(!context); 306 307 dev = context->dev; 308 netdev = dev->netdev; 309 310 atomic_dec(&dev->active_tx_urbs); 311 312 if (!netif_device_present(netdev)) 313 return; 314 315 /* check tx status */ 316 switch (urb->status) { 317 case 0: 318 /* prevent tx timeout */ 319 netif_trans_update(netdev); 320 break; 321 322 case -EPROTO: 323 case -ENOENT: 324 case -ECONNRESET: 325 case -ESHUTDOWN: 326 break; 327 328 default: 329 if (net_ratelimit()) 330 netdev_err(netdev, "Tx urb aborted (%d)\n", 331 urb->status); 332 break; 333 } 334 335 /* should always release echo skb and corresponding context */ 336 tx_bytes = can_get_echo_skb(netdev, context->echo_index, NULL); 337 context->echo_index = PCAN_USB_MAX_TX_URBS; 338 339 if (!urb->status) { 340 /* transmission complete */ 341 netdev->stats.tx_packets++; 342 netdev->stats.tx_bytes += tx_bytes; 343 344 /* do wakeup tx queue in case of success only */ 345 netif_wake_queue(netdev); 346 } 347} 348 349/* 350 * called by netdev to send one skb on the CAN interface. 351 */ 352static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb, 353 struct net_device *netdev) 354{ 355 struct peak_usb_device *dev = netdev_priv(netdev); 356 struct peak_tx_urb_context *context = NULL; 357 struct net_device_stats *stats = &netdev->stats; 358 struct urb *urb; 359 u8 *obuf; 360 int i, err; 361 size_t size = dev->adapter->tx_buffer_size; 362 363 if (can_dev_dropped_skb(netdev, skb)) 364 return NETDEV_TX_OK; 365 366 for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) 367 if (dev->tx_contexts[i].echo_index == PCAN_USB_MAX_TX_URBS) { 368 context = dev->tx_contexts + i; 369 break; 370 } 371 372 if (!context) { 373 /* should not occur except during restart */ 374 return NETDEV_TX_BUSY; 375 } 376 377 urb = context->urb; 378 obuf = urb->transfer_buffer; 379 380 err = dev->adapter->dev_encode_msg(dev, skb, obuf, &size); 381 if (err) { 382 if (net_ratelimit()) 383 netdev_err(netdev, "packet dropped\n"); 384 dev_kfree_skb(skb); 385 stats->tx_dropped++; 386 return NETDEV_TX_OK; 387 } 388 389 context->echo_index = i; 390 391 usb_anchor_urb(urb, &dev->tx_submitted); 392 393 can_put_echo_skb(skb, netdev, context->echo_index, 0); 394 395 atomic_inc(&dev->active_tx_urbs); 396 397 err = usb_submit_urb(urb, GFP_ATOMIC); 398 if (err) { 399 can_free_echo_skb(netdev, context->echo_index, NULL); 400 401 usb_unanchor_urb(urb); 402 403 /* this context is not used in fact */ 404 context->echo_index = PCAN_USB_MAX_TX_URBS; 405 406 atomic_dec(&dev->active_tx_urbs); 407 408 switch (err) { 409 case -ENODEV: 410 netif_device_detach(netdev); 411 break; 412 default: 413 netdev_warn(netdev, "tx urb submitting failed err=%d\n", 414 err); 415 fallthrough; 416 case -ENOENT: 417 /* cable unplugged */ 418 stats->tx_dropped++; 419 } 420 } else { 421 netif_trans_update(netdev); 422 423 /* slow down tx path */ 424 if (atomic_read(&dev->active_tx_urbs) >= PCAN_USB_MAX_TX_URBS) 425 netif_stop_queue(netdev); 426 } 427 428 return NETDEV_TX_OK; 429} 430 431/* 432 * start the CAN interface. 433 * Rx and Tx urbs are allocated here. Rx urbs are submitted here. 434 */ 435static int peak_usb_start(struct peak_usb_device *dev) 436{ 437 struct net_device *netdev = dev->netdev; 438 int err, i; 439 440 for (i = 0; i < PCAN_USB_MAX_RX_URBS; i++) { 441 struct urb *urb; 442 u8 *buf; 443 444 /* create a URB, and a buffer for it, to receive usb messages */ 445 urb = usb_alloc_urb(0, GFP_KERNEL); 446 if (!urb) { 447 err = -ENOMEM; 448 break; 449 } 450 451 buf = kmalloc(dev->adapter->rx_buffer_size, GFP_KERNEL); 452 if (!buf) { 453 usb_free_urb(urb); 454 err = -ENOMEM; 455 break; 456 } 457 458 usb_fill_bulk_urb(urb, dev->udev, 459 usb_rcvbulkpipe(dev->udev, dev->ep_msg_in), 460 buf, dev->adapter->rx_buffer_size, 461 peak_usb_read_bulk_callback, dev); 462 463 /* ask last usb_free_urb() to also kfree() transfer_buffer */ 464 urb->transfer_flags |= URB_FREE_BUFFER; 465 usb_anchor_urb(urb, &dev->rx_submitted); 466 467 err = usb_submit_urb(urb, GFP_KERNEL); 468 if (err) { 469 if (err == -ENODEV) 470 netif_device_detach(dev->netdev); 471 472 usb_unanchor_urb(urb); 473 kfree(buf); 474 usb_free_urb(urb); 475 break; 476 } 477 478 /* drop reference, USB core will take care of freeing it */ 479 usb_free_urb(urb); 480 } 481 482 /* did we submit any URBs? Warn if we was not able to submit all urbs */ 483 if (i < PCAN_USB_MAX_RX_URBS) { 484 if (i == 0) { 485 netdev_err(netdev, "couldn't setup any rx URB\n"); 486 return err; 487 } 488 489 netdev_warn(netdev, "rx performance may be slow\n"); 490 } 491 492 /* pre-alloc tx buffers and corresponding urbs */ 493 for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) { 494 struct peak_tx_urb_context *context; 495 struct urb *urb; 496 u8 *buf; 497 498 /* create a URB and a buffer for it, to transmit usb messages */ 499 urb = usb_alloc_urb(0, GFP_KERNEL); 500 if (!urb) { 501 err = -ENOMEM; 502 break; 503 } 504 505 buf = kmalloc(dev->adapter->tx_buffer_size, GFP_KERNEL); 506 if (!buf) { 507 usb_free_urb(urb); 508 err = -ENOMEM; 509 break; 510 } 511 512 context = dev->tx_contexts + i; 513 context->dev = dev; 514 context->urb = urb; 515 516 usb_fill_bulk_urb(urb, dev->udev, 517 usb_sndbulkpipe(dev->udev, dev->ep_msg_out), 518 buf, dev->adapter->tx_buffer_size, 519 peak_usb_write_bulk_callback, context); 520 521 /* ask last usb_free_urb() to also kfree() transfer_buffer */ 522 urb->transfer_flags |= URB_FREE_BUFFER; 523 } 524 525 /* warn if we were not able to allocate enough tx contexts */ 526 if (i < PCAN_USB_MAX_TX_URBS) { 527 if (i == 0) { 528 netdev_err(netdev, "couldn't setup any tx URB\n"); 529 goto err_tx; 530 } 531 532 netdev_warn(netdev, "tx performance may be slow\n"); 533 } 534 535 if (dev->adapter->dev_start) { 536 err = dev->adapter->dev_start(dev); 537 if (err) 538 goto err_adapter; 539 } 540 541 dev->state |= PCAN_USB_STATE_STARTED; 542 543 /* can set bus on now */ 544 if (dev->adapter->dev_set_bus) { 545 err = dev->adapter->dev_set_bus(dev, 1); 546 if (err) 547 goto err_adapter; 548 } 549 550 dev->can.state = CAN_STATE_ERROR_ACTIVE; 551 552 return 0; 553 554err_adapter: 555 if (err == -ENODEV) 556 netif_device_detach(dev->netdev); 557 558 netdev_warn(netdev, "couldn't submit control: %d\n", err); 559 560 for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) { 561 usb_free_urb(dev->tx_contexts[i].urb); 562 dev->tx_contexts[i].urb = NULL; 563 } 564err_tx: 565 usb_kill_anchored_urbs(&dev->rx_submitted); 566 567 return err; 568} 569 570/* 571 * called by netdev to open the corresponding CAN interface. 572 */ 573static int peak_usb_ndo_open(struct net_device *netdev) 574{ 575 struct peak_usb_device *dev = netdev_priv(netdev); 576 int err; 577 578 /* common open */ 579 err = open_candev(netdev); 580 if (err) 581 return err; 582 583 /* finally start device */ 584 err = peak_usb_start(dev); 585 if (err) { 586 netdev_err(netdev, "couldn't start device: %d\n", err); 587 close_candev(netdev); 588 return err; 589 } 590 591 netif_start_queue(netdev); 592 593 return 0; 594} 595 596/* 597 * unlink in-flight Rx and Tx urbs and free their memory. 598 */ 599static void peak_usb_unlink_all_urbs(struct peak_usb_device *dev) 600{ 601 int i; 602 603 /* free all Rx (submitted) urbs */ 604 usb_kill_anchored_urbs(&dev->rx_submitted); 605 606 /* free unsubmitted Tx urbs first */ 607 for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) { 608 struct urb *urb = dev->tx_contexts[i].urb; 609 610 if (!urb || 611 dev->tx_contexts[i].echo_index != PCAN_USB_MAX_TX_URBS) { 612 /* 613 * this urb is already released or always submitted, 614 * let usb core free by itself 615 */ 616 continue; 617 } 618 619 usb_free_urb(urb); 620 dev->tx_contexts[i].urb = NULL; 621 } 622 623 /* then free all submitted Tx urbs */ 624 usb_kill_anchored_urbs(&dev->tx_submitted); 625 atomic_set(&dev->active_tx_urbs, 0); 626} 627 628/* 629 * called by netdev to close the corresponding CAN interface. 630 */ 631static int peak_usb_ndo_stop(struct net_device *netdev) 632{ 633 struct peak_usb_device *dev = netdev_priv(netdev); 634 635 dev->state &= ~PCAN_USB_STATE_STARTED; 636 netif_stop_queue(netdev); 637 638 close_candev(netdev); 639 640 dev->can.state = CAN_STATE_STOPPED; 641 642 /* unlink all pending urbs and free used memory */ 643 peak_usb_unlink_all_urbs(dev); 644 645 if (dev->adapter->dev_stop) 646 dev->adapter->dev_stop(dev); 647 648 /* can set bus off now */ 649 if (dev->adapter->dev_set_bus) { 650 int err = dev->adapter->dev_set_bus(dev, 0); 651 652 if (err) 653 return err; 654 } 655 656 return 0; 657} 658 659/* 660 * handle end of waiting for the device to reset 661 */ 662void peak_usb_restart_complete(struct peak_usb_device *dev) 663{ 664 /* finally MUST update can state */ 665 dev->can.state = CAN_STATE_ERROR_ACTIVE; 666 667 /* netdev queue can be awaken now */ 668 netif_wake_queue(dev->netdev); 669} 670 671void peak_usb_async_complete(struct urb *urb) 672{ 673 kfree(urb->transfer_buffer); 674 usb_free_urb(urb); 675} 676 677/* 678 * device (auto-)restart mechanism runs in a timer context => 679 * MUST handle restart with asynchronous usb transfers 680 */ 681static int peak_usb_restart(struct peak_usb_device *dev) 682{ 683 struct urb *urb; 684 int err; 685 u8 *buf; 686 687 /* 688 * if device doesn't define any asynchronous restart handler, simply 689 * wake the netdev queue up 690 */ 691 if (!dev->adapter->dev_restart_async) { 692 peak_usb_restart_complete(dev); 693 return 0; 694 } 695 696 /* first allocate a urb to handle the asynchronous steps */ 697 urb = usb_alloc_urb(0, GFP_ATOMIC); 698 if (!urb) 699 return -ENOMEM; 700 701 /* also allocate enough space for the commands to send */ 702 buf = kmalloc(PCAN_USB_MAX_CMD_LEN, GFP_ATOMIC); 703 if (!buf) { 704 usb_free_urb(urb); 705 return -ENOMEM; 706 } 707 708 /* call the device specific handler for the restart */ 709 err = dev->adapter->dev_restart_async(dev, urb, buf); 710 if (!err) 711 return 0; 712 713 kfree(buf); 714 usb_free_urb(urb); 715 716 return err; 717} 718 719/* 720 * candev callback used to change CAN mode. 721 * Warning: this is called from a timer context! 722 */ 723static int peak_usb_set_mode(struct net_device *netdev, enum can_mode mode) 724{ 725 struct peak_usb_device *dev = netdev_priv(netdev); 726 int err = 0; 727 728 switch (mode) { 729 case CAN_MODE_START: 730 err = peak_usb_restart(dev); 731 if (err) 732 netdev_err(netdev, "couldn't start device (err %d)\n", 733 err); 734 break; 735 736 default: 737 return -EOPNOTSUPP; 738 } 739 740 return err; 741} 742 743/* 744 * candev callback used to set device nominal/arbitration bitrate. 745 */ 746static int peak_usb_set_bittiming(struct net_device *netdev) 747{ 748 struct peak_usb_device *dev = netdev_priv(netdev); 749 const struct peak_usb_adapter *pa = dev->adapter; 750 751 if (pa->dev_set_bittiming) { 752 struct can_bittiming *bt = &dev->can.bittiming; 753 int err = pa->dev_set_bittiming(dev, bt); 754 755 if (err) 756 netdev_info(netdev, "couldn't set bitrate (err %d)\n", 757 err); 758 return err; 759 } 760 761 return 0; 762} 763 764/* 765 * candev callback used to set device data bitrate. 766 */ 767static int peak_usb_set_data_bittiming(struct net_device *netdev) 768{ 769 struct peak_usb_device *dev = netdev_priv(netdev); 770 const struct peak_usb_adapter *pa = dev->adapter; 771 772 if (pa->dev_set_data_bittiming) { 773 struct can_bittiming *bt = &dev->can.fd.data_bittiming; 774 int err = pa->dev_set_data_bittiming(dev, bt); 775 776 if (err) 777 netdev_info(netdev, 778 "couldn't set data bitrate (err %d)\n", 779 err); 780 781 return err; 782 } 783 784 return 0; 785} 786 787static int peak_hwtstamp_get(struct net_device *netdev, 788 struct kernel_hwtstamp_config *config) 789{ 790 config->tx_type = HWTSTAMP_TX_OFF; 791 config->rx_filter = HWTSTAMP_FILTER_ALL; 792 793 return 0; 794} 795 796static int peak_hwtstamp_set(struct net_device *netdev, 797 struct kernel_hwtstamp_config *config, 798 struct netlink_ext_ack *extack) 799{ 800 if (config->tx_type == HWTSTAMP_TX_OFF && 801 config->rx_filter == HWTSTAMP_FILTER_ALL) 802 return 0; 803 804 NL_SET_ERR_MSG_MOD(extack, "Only RX HWTSTAMP_FILTER_ALL is supported"); 805 return -ERANGE; 806} 807 808static const struct net_device_ops peak_usb_netdev_ops = { 809 .ndo_open = peak_usb_ndo_open, 810 .ndo_stop = peak_usb_ndo_stop, 811 .ndo_start_xmit = peak_usb_ndo_start_xmit, 812 .ndo_hwtstamp_get = peak_hwtstamp_get, 813 .ndo_hwtstamp_set = peak_hwtstamp_set, 814}; 815 816/* CAN-USB devices generally handle 32-bit CAN channel IDs. 817 * In case one doesn't, then it have to overload this function. 818 */ 819int peak_usb_get_eeprom_len(struct net_device *netdev) 820{ 821 return sizeof(u32); 822} 823 824/* Every CAN-USB device exports the dev_get_can_channel_id() operation. It is used 825 * here to fill the data buffer with the user defined CAN channel ID. 826 */ 827int peak_usb_get_eeprom(struct net_device *netdev, 828 struct ethtool_eeprom *eeprom, u8 *data) 829{ 830 struct peak_usb_device *dev = netdev_priv(netdev); 831 u32 ch_id; 832 __le32 ch_id_le; 833 int err; 834 835 err = dev->adapter->dev_get_can_channel_id(dev, &ch_id); 836 if (err) 837 return err; 838 839 /* ethtool operates on individual bytes. The byte order of the CAN 840 * channel id in memory depends on the kernel architecture. We 841 * convert the CAN channel id back to the native byte order of the PEAK 842 * device itself to ensure that the order is consistent for all 843 * host architectures. 844 */ 845 ch_id_le = cpu_to_le32(ch_id); 846 memcpy(data, (u8 *)&ch_id_le + eeprom->offset, eeprom->len); 847 848 /* update cached value */ 849 dev->can_channel_id = ch_id; 850 return err; 851} 852 853/* Every CAN-USB device exports the dev_get_can_channel_id()/dev_set_can_channel_id() 854 * operations. They are used here to set the new user defined CAN channel ID. 855 */ 856int peak_usb_set_eeprom(struct net_device *netdev, 857 struct ethtool_eeprom *eeprom, u8 *data) 858{ 859 struct peak_usb_device *dev = netdev_priv(netdev); 860 u32 ch_id; 861 __le32 ch_id_le; 862 int err; 863 864 /* first, read the current user defined CAN channel ID */ 865 err = dev->adapter->dev_get_can_channel_id(dev, &ch_id); 866 if (err) { 867 netdev_err(netdev, "Failed to init CAN channel id (err %d)\n", err); 868 return err; 869 } 870 871 /* do update the value with user given bytes. 872 * ethtool operates on individual bytes. The byte order of the CAN 873 * channel ID in memory depends on the kernel architecture. We 874 * convert the CAN channel ID back to the native byte order of the PEAK 875 * device itself to ensure that the order is consistent for all 876 * host architectures. 877 */ 878 ch_id_le = cpu_to_le32(ch_id); 879 memcpy((u8 *)&ch_id_le + eeprom->offset, data, eeprom->len); 880 ch_id = le32_to_cpu(ch_id_le); 881 882 /* flash the new value now */ 883 err = dev->adapter->dev_set_can_channel_id(dev, ch_id); 884 if (err) { 885 netdev_err(netdev, "Failed to write new CAN channel id (err %d)\n", 886 err); 887 return err; 888 } 889 890 /* update cached value with the new one */ 891 dev->can_channel_id = ch_id; 892 893 return 0; 894} 895 896int pcan_get_ts_info(struct net_device *dev, struct kernel_ethtool_ts_info *info) 897{ 898 info->so_timestamping = 899 SOF_TIMESTAMPING_TX_SOFTWARE | 900 SOF_TIMESTAMPING_RX_HARDWARE | 901 SOF_TIMESTAMPING_RAW_HARDWARE; 902 info->tx_types = BIT(HWTSTAMP_TX_OFF); 903 info->rx_filters = BIT(HWTSTAMP_FILTER_ALL); 904 905 return 0; 906} 907 908/* 909 * create one device which is attached to CAN controller #ctrl_idx of the 910 * usb adapter. 911 */ 912static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter, 913 struct usb_interface *intf, int ctrl_idx) 914{ 915 struct usb_device *usb_dev = interface_to_usbdev(intf); 916 int sizeof_candev = peak_usb_adapter->sizeof_dev_private; 917 struct peak_usb_device *dev; 918 struct net_device *netdev; 919 int i, err; 920 u16 tmp16; 921 922 if (sizeof_candev < sizeof(struct peak_usb_device)) 923 sizeof_candev = sizeof(struct peak_usb_device); 924 925 netdev = alloc_candev(sizeof_candev, PCAN_USB_MAX_TX_URBS); 926 if (!netdev) { 927 dev_err(&intf->dev, "%s: couldn't alloc candev\n", 928 PCAN_USB_DRIVER_NAME); 929 return -ENOMEM; 930 } 931 932 dev = netdev_priv(netdev); 933 934 /* allocate a buffer large enough to send commands */ 935 dev->cmd_buf = kzalloc(PCAN_USB_MAX_CMD_LEN, GFP_KERNEL); 936 if (!dev->cmd_buf) { 937 err = -ENOMEM; 938 goto lbl_free_candev; 939 } 940 941 dev->udev = usb_dev; 942 dev->netdev = netdev; 943 dev->adapter = peak_usb_adapter; 944 dev->ctrl_idx = ctrl_idx; 945 dev->state = PCAN_USB_STATE_CONNECTED; 946 947 dev->ep_msg_in = peak_usb_adapter->ep_msg_in; 948 dev->ep_msg_out = peak_usb_adapter->ep_msg_out[ctrl_idx]; 949 950 dev->can.clock = peak_usb_adapter->clock; 951 dev->can.bittiming_const = peak_usb_adapter->bittiming_const; 952 dev->can.do_set_bittiming = peak_usb_set_bittiming; 953 dev->can.fd.data_bittiming_const = peak_usb_adapter->data_bittiming_const; 954 dev->can.fd.do_set_data_bittiming = peak_usb_set_data_bittiming; 955 dev->can.do_set_mode = peak_usb_set_mode; 956 dev->can.do_get_berr_counter = peak_usb_adapter->do_get_berr_counter; 957 dev->can.ctrlmode_supported = peak_usb_adapter->ctrlmode_supported; 958 959 netdev->netdev_ops = &peak_usb_netdev_ops; 960 961 netdev->flags |= IFF_ECHO; /* we support local echo */ 962 963 /* add ethtool support */ 964 netdev->ethtool_ops = peak_usb_adapter->ethtool_ops; 965 966 /* register peak_usb sysfs files */ 967 netdev->sysfs_groups[0] = &peak_usb_sysfs_group; 968 969 init_usb_anchor(&dev->rx_submitted); 970 971 init_usb_anchor(&dev->tx_submitted); 972 atomic_set(&dev->active_tx_urbs, 0); 973 974 for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) 975 dev->tx_contexts[i].echo_index = PCAN_USB_MAX_TX_URBS; 976 977 dev->prev_siblings = usb_get_intfdata(intf); 978 usb_set_intfdata(intf, dev); 979 980 SET_NETDEV_DEV(netdev, &intf->dev); 981 netdev->dev_id = ctrl_idx; 982 983 err = register_candev(netdev); 984 if (err) { 985 dev_err(&intf->dev, "couldn't register CAN device: %d\n", err); 986 goto lbl_restore_intf_data; 987 } 988 989 if (dev->prev_siblings) 990 (dev->prev_siblings)->next_siblings = dev; 991 992 /* keep hw revision into the netdevice */ 993 tmp16 = le16_to_cpu(usb_dev->descriptor.bcdDevice); 994 dev->device_rev = tmp16 >> 8; 995 996 if (dev->adapter->dev_init) { 997 err = dev->adapter->dev_init(dev); 998 if (err) 999 goto lbl_unregister_candev; 1000 } 1001 1002 /* set bus off */ 1003 if (dev->adapter->dev_set_bus) { 1004 err = dev->adapter->dev_set_bus(dev, 0); 1005 if (err) 1006 goto adap_dev_free; 1007 } 1008 1009 /* get CAN channel id early */ 1010 dev->adapter->dev_get_can_channel_id(dev, &dev->can_channel_id); 1011 1012 netdev_info(netdev, "attached to %s channel %u (device 0x%08X)\n", 1013 peak_usb_adapter->name, ctrl_idx, dev->can_channel_id); 1014 1015 return 0; 1016 1017adap_dev_free: 1018 if (dev->adapter->dev_free) 1019 dev->adapter->dev_free(dev); 1020 1021lbl_unregister_candev: 1022 unregister_candev(netdev); 1023 1024lbl_restore_intf_data: 1025 usb_set_intfdata(intf, dev->prev_siblings); 1026 kfree(dev->cmd_buf); 1027 1028lbl_free_candev: 1029 free_candev(netdev); 1030 1031 return err; 1032} 1033 1034/* 1035 * called by the usb core when the device is unplugged from the system 1036 */ 1037static void peak_usb_disconnect(struct usb_interface *intf) 1038{ 1039 struct peak_usb_device *dev; 1040 struct peak_usb_device *dev_prev_siblings; 1041 1042 /* unregister as many netdev devices as siblings */ 1043 for (dev = usb_get_intfdata(intf); dev; dev = dev_prev_siblings) { 1044 struct net_device *netdev = dev->netdev; 1045 char name[IFNAMSIZ]; 1046 1047 dev_prev_siblings = dev->prev_siblings; 1048 dev->state &= ~PCAN_USB_STATE_CONNECTED; 1049 strscpy(name, netdev->name, IFNAMSIZ); 1050 1051 unregister_candev(netdev); 1052 1053 kfree(dev->cmd_buf); 1054 dev->next_siblings = NULL; 1055 if (dev->adapter->dev_free) 1056 dev->adapter->dev_free(dev); 1057 1058 free_candev(netdev); 1059 dev_info(&intf->dev, "%s removed\n", name); 1060 } 1061 1062 usb_set_intfdata(intf, NULL); 1063} 1064 1065/* 1066 * probe function for new PEAK-System devices 1067 */ 1068static int peak_usb_probe(struct usb_interface *intf, 1069 const struct usb_device_id *id) 1070{ 1071 const struct peak_usb_adapter *peak_usb_adapter; 1072 int i, err = -ENOMEM; 1073 1074 /* get corresponding PCAN-USB adapter */ 1075 peak_usb_adapter = (const struct peak_usb_adapter *)id->driver_info; 1076 1077 /* got corresponding adapter: check if it handles current interface */ 1078 if (peak_usb_adapter->intf_probe) { 1079 err = peak_usb_adapter->intf_probe(intf); 1080 if (err) 1081 return err; 1082 } 1083 1084 for (i = 0; i < peak_usb_adapter->ctrl_count; i++) { 1085 err = peak_usb_create_dev(peak_usb_adapter, intf, i); 1086 if (err) { 1087 /* deregister already created devices */ 1088 peak_usb_disconnect(intf); 1089 break; 1090 } 1091 } 1092 1093 return err; 1094} 1095 1096/* usb specific object needed to register this driver with the usb subsystem */ 1097static struct usb_driver peak_usb_driver = { 1098 .name = PCAN_USB_DRIVER_NAME, 1099 .disconnect = peak_usb_disconnect, 1100 .probe = peak_usb_probe, 1101 .id_table = peak_usb_table, 1102}; 1103 1104static int __init peak_usb_init(void) 1105{ 1106 int err; 1107 1108 /* register this driver with the USB subsystem */ 1109 err = usb_register(&peak_usb_driver); 1110 if (err) 1111 pr_err("%s: usb_register failed (err %d)\n", 1112 PCAN_USB_DRIVER_NAME, err); 1113 1114 return err; 1115} 1116 1117static int peak_usb_do_device_exit(struct device *d, void *arg) 1118{ 1119 struct usb_interface *intf = to_usb_interface(d); 1120 struct peak_usb_device *dev; 1121 1122 /* stop as many netdev devices as siblings */ 1123 for (dev = usb_get_intfdata(intf); dev; dev = dev->prev_siblings) { 1124 struct net_device *netdev = dev->netdev; 1125 1126 if (netif_device_present(netdev)) 1127 if (dev->adapter->dev_exit) 1128 dev->adapter->dev_exit(dev); 1129 } 1130 1131 return 0; 1132} 1133 1134static void __exit peak_usb_exit(void) 1135{ 1136 int err; 1137 1138 /* last chance do send any synchronous commands here */ 1139 err = driver_for_each_device(&peak_usb_driver.driver, NULL, 1140 NULL, peak_usb_do_device_exit); 1141 if (err) 1142 pr_err("%s: failed to stop all can devices (err %d)\n", 1143 PCAN_USB_DRIVER_NAME, err); 1144 1145 /* deregister this driver with the USB subsystem */ 1146 usb_deregister(&peak_usb_driver); 1147 1148 pr_info("%s: PCAN-USB interfaces driver unloaded\n", 1149 PCAN_USB_DRIVER_NAME); 1150} 1151 1152module_init(peak_usb_init); 1153module_exit(peak_usb_exit);
~/
Read-only file preview.