1 // SPDX-License-Identifier: GPL-2.0 2 3 /* Driver for Theobroma Systems UCAN devices, Protocol Version 3 4 * 5 * Copyright (C) 2018 Theobroma Systems Design und Consulting GmbH 6 * 7 * 8 * General Description: 9 * 10 * The USB Device uses three Endpoints: 11 * 12 * CONTROL Endpoint: Is used the setup the device (start, stop, 13 * info, configure). 14 * 15 * IN Endpoint: The device sends CAN Frame Messages and Device 16 * Information using the IN endpoint. 17 * 18 * OUT Endpoint: The driver sends configuration requests, and CAN 19 * Frames on the out endpoint. 20 * 21 * Error Handling: 22 * 23 * If error reporting is turned on the device encodes error into CAN 24 * error frames (see uapi/linux/can/error.h) and sends it using the 25 * IN Endpoint. The driver updates statistics and forward it. 26 */ 27 28 #include <linux/can.h> 29 #include <linux/can/dev.h> 30 #include <linux/can/error.h> 31 #include <linux/module.h> 32 #include <linux/netdevice.h> 33 #include <linux/signal.h> 34 #include <linux/skbuff.h> 35 #include <linux/slab.h> 36 #include <linux/usb.h> 37 38 #define UCAN_DRIVER_NAME "ucan" 39 #define UCAN_MAX_RX_URBS 8 40 /* the CAN controller needs a while to enable/disable the bus */ 41 #define UCAN_USB_CTL_PIPE_TIMEOUT 1000 42 /* this driver currently supports protocol version 3 only */ 43 #define UCAN_PROTOCOL_VERSION_MIN 3 44 #define UCAN_PROTOCOL_VERSION_MAX 3 45 46 /* UCAN Message Definitions 47 * ------------------------ 48 * 49 * ucan_message_out_t and ucan_message_in_t define the messages 50 * transmitted on the OUT and IN endpoint. 51 * 52 * Multibyte fields are transmitted with little endianness 53 * 54 * INTR Endpoint: a single uint32_t storing the current space in the fifo 55 * 56 * OUT Endpoint: single message of type ucan_message_out_t is 57 * transmitted on the out endpoint 58 * 59 * IN Endpoint: multiple messages ucan_message_in_t concateted in 60 * the following way: 61 * 62 * m[n].len <=> the length if message n(including the header in bytes) 63 * m[n] is is aligned to a 4 byte boundary, hence 64 * offset(m[0]) := 0; 65 * offset(m[n+1]) := offset(m[n]) + (m[n].len + 3) & 3 66 * 67 * this implies that 68 * offset(m[n]) % 4 <=> 0 69 */ 70 71 /* Device Global Commands */ 72 enum { 73 UCAN_DEVICE_GET_FW_STRING = 0, 74 }; 75 76 /* UCAN Commands */ 77 enum { 78 /* start the can transceiver - val defines the operation mode */ 79 UCAN_COMMAND_START = 0, 80 /* cancel pending transmissions and stop the can transceiver */ 81 UCAN_COMMAND_STOP = 1, 82 /* send can transceiver into low-power sleep mode */ 83 UCAN_COMMAND_SLEEP = 2, 84 /* wake up can transceiver from low-power sleep mode */ 85 UCAN_COMMAND_WAKEUP = 3, 86 /* reset the can transceiver */ 87 UCAN_COMMAND_RESET = 4, 88 /* get piece of info from the can transceiver - subcmd defines what 89 * piece 90 */ 91 UCAN_COMMAND_GET = 5, 92 /* clear or disable hardware filter - subcmd defines which of the two */ 93 UCAN_COMMAND_FILTER = 6, 94 /* Setup bittiming */ 95 UCAN_COMMAND_SET_BITTIMING = 7, 96 /* recover from bus-off state */ 97 UCAN_COMMAND_RESTART = 8, 98 }; 99 100 /* UCAN_COMMAND_START and UCAN_COMMAND_GET_INFO operation modes (bitmap). 101 * Undefined bits must be set to 0. 102 */ 103 enum { 104 UCAN_MODE_LOOPBACK = BIT(0), 105 UCAN_MODE_SILENT = BIT(1), 106 UCAN_MODE_3_SAMPLES = BIT(2), 107 UCAN_MODE_ONE_SHOT = BIT(3), 108 UCAN_MODE_BERR_REPORT = BIT(4), 109 }; 110 111 /* UCAN_COMMAND_GET subcommands */ 112 enum { 113 UCAN_COMMAND_GET_INFO = 0, 114 UCAN_COMMAND_GET_PROTOCOL_VERSION = 1, 115 }; 116 117 /* UCAN_COMMAND_FILTER subcommands */ 118 enum { 119 UCAN_FILTER_CLEAR = 0, 120 UCAN_FILTER_DISABLE = 1, 121 UCAN_FILTER_ENABLE = 2, 122 }; 123 124 /* OUT endpoint message types */ 125 enum { 126 UCAN_OUT_TX = 2, /* transmit a CAN frame */ 127 }; 128 129 /* IN endpoint message types */ 130 enum { 131 UCAN_IN_TX_COMPLETE = 1, /* CAN frame transmission completed */ 132 UCAN_IN_RX = 2, /* CAN frame received */ 133 }; 134 135 struct ucan_ctl_cmd_start { 136 __le16 mode; /* OR-ing any of UCAN_MODE_* */ 137 } __packed; 138 139 struct ucan_ctl_cmd_set_bittiming { 140 __le32 tq; /* Time quanta (TQ) in nanoseconds */ 141 __le16 brp; /* TQ Prescaler */ 142 __le16 sample_point; /* Samplepoint on tenth percent */ 143 u8 prop_seg; /* Propagation segment in TQs */ 144 u8 phase_seg1; /* Phase buffer segment 1 in TQs */ 145 u8 phase_seg2; /* Phase buffer segment 2 in TQs */ 146 u8 sjw; /* Synchronisation jump width in TQs */ 147 } __packed; 148 149 struct ucan_ctl_cmd_device_info { 150 __le32 freq; /* Clock Frequency for tq generation */ 151 u8 tx_fifo; /* Size of the transmission fifo */ 152 u8 sjw_max; /* can_bittiming fields... */ 153 u8 tseg1_min; 154 u8 tseg1_max; 155 u8 tseg2_min; 156 u8 tseg2_max; 157 __le16 brp_inc; 158 __le32 brp_min; 159 __le32 brp_max; /* ...can_bittiming fields */ 160 __le16 ctrlmodes; /* supported control modes */ 161 __le16 hwfilter; /* Number of HW filter banks */ 162 __le16 rxmboxes; /* Number of receive Mailboxes */ 163 } __packed; 164 165 struct ucan_ctl_cmd_get_protocol_version { 166 __le32 version; 167 } __packed; 168 169 union ucan_ctl_payload { 170 /* Setup Bittiming 171 * bmRequest == UCAN_COMMAND_START 172 */ 173 struct ucan_ctl_cmd_start cmd_start; 174 /* Setup Bittiming 175 * bmRequest == UCAN_COMMAND_SET_BITTIMING 176 */ 177 struct ucan_ctl_cmd_set_bittiming cmd_set_bittiming; 178 /* Get Device Information 179 * bmRequest == UCAN_COMMAND_GET; wValue = UCAN_COMMAND_GET_INFO 180 */ 181 struct ucan_ctl_cmd_device_info cmd_get_device_info; 182 /* Get Protocol Version 183 * bmRequest == UCAN_COMMAND_GET; 184 * wValue = UCAN_COMMAND_GET_PROTOCOL_VERSION 185 */ 186 struct ucan_ctl_cmd_get_protocol_version cmd_get_protocol_version; 187 188 u8 raw[128]; 189 } __packed; 190 191 enum { 192 UCAN_TX_COMPLETE_SUCCESS = BIT(0), 193 }; 194 195 /* Transmission Complete within ucan_message_in */ 196 struct ucan_tx_complete_entry_t { 197 u8 echo_index; 198 u8 flags; 199 } __packed __aligned(0x2); 200 201 /* CAN Data message format within ucan_message_in/out */ 202 struct ucan_can_msg { 203 /* note DLC is computed by 204 * msg.len - sizeof (msg.len) 205 * - sizeof (msg.type) 206 * - sizeof (msg.can_msg.id) 207 */ 208 __le32 id; 209 210 union { 211 u8 data[CAN_MAX_DLEN]; /* Data of CAN frames */ 212 u8 dlc; /* RTR dlc */ 213 }; 214 } __packed; 215 216 /* OUT Endpoint, outbound messages */ 217 struct ucan_message_out { 218 __le16 len; /* Length of the content include header */ 219 u8 type; /* UCAN_OUT_TX and friends */ 220 u8 subtype; /* command sub type */ 221 222 union { 223 /* Transmit CAN frame 224 * (type == UCAN_TX) && ((msg.can_msg.id & CAN_RTR_FLAG) == 0) 225 * subtype stores the echo id 226 */ 227 struct ucan_can_msg can_msg; 228 } msg; 229 } __packed __aligned(0x4); 230 231 /* IN Endpoint, inbound messages */ 232 struct ucan_message_in { 233 __le16 len; /* Length of the content include header */ 234 u8 type; /* UCAN_IN_RX and friends */ 235 u8 subtype; /* command sub type */ 236 237 union { 238 /* CAN Frame received 239 * (type == UCAN_IN_RX) 240 * && ((msg.can_msg.id & CAN_RTR_FLAG) == 0) 241 */ 242 struct ucan_can_msg can_msg; 243 244 /* CAN transmission complete 245 * (type == UCAN_IN_TX_COMPLETE) 246 */ 247 struct ucan_tx_complete_entry_t can_tx_complete_msg[0]; 248 } __aligned(0x4) msg; 249 } __packed; 250 251 /* Macros to calculate message lengths */ 252 #define UCAN_OUT_HDR_SIZE offsetof(struct ucan_message_out, msg) 253 254 #define UCAN_IN_HDR_SIZE offsetof(struct ucan_message_in, msg) 255 #define UCAN_IN_LEN(member) (UCAN_OUT_HDR_SIZE + sizeof(member)) 256 257 struct ucan_priv; 258 259 /* Context Information for transmission URBs */ 260 struct ucan_urb_context { 261 struct ucan_priv *up; 262 u8 dlc; 263 bool allocated; 264 }; 265 266 /* Information reported by the USB device */ 267 struct ucan_device_info { 268 struct can_bittiming_const bittiming_const; 269 u8 tx_fifo; 270 }; 271 272 /* Driver private data */ 273 struct ucan_priv { 274 /* must be the first member */ 275 struct can_priv can; 276 277 /* linux USB device structures */ 278 struct usb_device *udev; 279 struct usb_interface *intf; 280 struct net_device *netdev; 281 282 /* lock for can->echo_skb (used around 283 * can_put/get/free_echo_skb 284 */ 285 spinlock_t echo_skb_lock; 286 287 /* usb device information information */ 288 u8 intf_index; 289 u8 in_ep_addr; 290 u8 out_ep_addr; 291 u16 in_ep_size; 292 293 /* transmission and reception buffers */ 294 struct usb_anchor rx_urbs; 295 struct usb_anchor tx_urbs; 296 297 union ucan_ctl_payload *ctl_msg_buffer; 298 struct ucan_device_info device_info; 299 300 /* transmission control information and locks */ 301 spinlock_t context_lock; 302 unsigned int available_tx_urbs; 303 struct ucan_urb_context *context_array; 304 }; 305 306 static u8 ucan_get_can_dlc(struct ucan_can_msg *msg, u16 len) 307 { 308 if (le32_to_cpu(msg->id) & CAN_RTR_FLAG) 309 return get_can_dlc(msg->dlc); 310 else 311 return get_can_dlc(len - (UCAN_IN_HDR_SIZE + sizeof(msg->id))); 312 } 313 314 static void ucan_release_context_array(struct ucan_priv *up) 315 { 316 if (!up->context_array) 317 return; 318 319 /* lock is not needed because, driver is currently opening or closing */ 320 up->available_tx_urbs = 0; 321 322 kfree(up->context_array); 323 up->context_array = NULL; 324 } 325 326 static int ucan_alloc_context_array(struct ucan_priv *up) 327 { 328 int i; 329 330 /* release contexts if any */ 331 ucan_release_context_array(up); 332 333 up->context_array = kcalloc(up->device_info.tx_fifo, 334 sizeof(*up->context_array), 335 GFP_KERNEL); 336 if (!up->context_array) { 337 netdev_err(up->netdev, 338 "Not enough memory to allocate tx contexts\n"); 339 return -ENOMEM; 340 } 341 342 for (i = 0; i < up->device_info.tx_fifo; i++) { 343 up->context_array[i].allocated = false; 344 up->context_array[i].up = up; 345 } 346 347 /* lock is not needed because, driver is currently opening */ 348 up->available_tx_urbs = up->device_info.tx_fifo; 349 350 return 0; 351 } 352 353 static struct ucan_urb_context *ucan_alloc_context(struct ucan_priv *up) 354 { 355 int i; 356 unsigned long flags; 357 struct ucan_urb_context *ret = NULL; 358 359 if (WARN_ON_ONCE(!up->context_array)) 360 return NULL; 361 362 /* execute context operation atomically */ 363 spin_lock_irqsave(&up->context_lock, flags); 364 365 for (i = 0; i < up->device_info.tx_fifo; i++) { 366 if (!up->context_array[i].allocated) { 367 /* update context */ 368 ret = &up->context_array[i]; 369 up->context_array[i].allocated = true; 370 371 /* stop queue if necessary */ 372 up->available_tx_urbs--; 373 if (!up->available_tx_urbs) 374 netif_stop_queue(up->netdev); 375 376 break; 377 } 378 } 379 380 spin_unlock_irqrestore(&up->context_lock, flags); 381 return ret; 382 } 383 384 static bool ucan_release_context(struct ucan_priv *up, 385 struct ucan_urb_context *ctx) 386 { 387 unsigned long flags; 388 bool ret = false; 389 390 if (WARN_ON_ONCE(!up->context_array)) 391 return false; 392 393 /* execute context operation atomically */ 394 spin_lock_irqsave(&up->context_lock, flags); 395 396 /* context was not allocated, maybe the device sent garbage */ 397 if (ctx->allocated) { 398 ctx->allocated = false; 399 400 /* check if the queue needs to be woken */ 401 if (!up->available_tx_urbs) 402 netif_wake_queue(up->netdev); 403 up->available_tx_urbs++; 404 405 ret = true; 406 } 407 408 spin_unlock_irqrestore(&up->context_lock, flags); 409 return ret; 410 } 411 412 static int ucan_ctrl_command_out(struct ucan_priv *up, 413 u8 cmd, u16 subcmd, u16 datalen) 414 { 415 return usb_control_msg(up->udev, 416 usb_sndctrlpipe(up->udev, 0), 417 cmd, 418 USB_DIR_OUT | USB_TYPE_VENDOR | 419 USB_RECIP_INTERFACE, 420 subcmd, 421 up->intf_index, 422 up->ctl_msg_buffer, 423 datalen, 424 UCAN_USB_CTL_PIPE_TIMEOUT); 425 } 426 427 static int ucan_device_request_in(struct ucan_priv *up, 428 u8 cmd, u16 subcmd, u16 datalen) 429 { 430 return usb_control_msg(up->udev, 431 usb_rcvctrlpipe(up->udev, 0), 432 cmd, 433 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 434 subcmd, 435 0, 436 up->ctl_msg_buffer, 437 datalen, 438 UCAN_USB_CTL_PIPE_TIMEOUT); 439 } 440 441 /* Parse the device information structure reported by the device and 442 * setup private variables accordingly 443 */ 444 static void ucan_parse_device_info(struct ucan_priv *up, 445 struct ucan_ctl_cmd_device_info *device_info) 446 { 447 struct can_bittiming_const *bittiming = 448 &up->device_info.bittiming_const; 449 u16 ctrlmodes; 450 451 /* store the data */ 452 up->can.clock.freq = le32_to_cpu(device_info->freq); 453 up->device_info.tx_fifo = device_info->tx_fifo; 454 strcpy(bittiming->name, "ucan"); 455 bittiming->tseg1_min = device_info->tseg1_min; 456 bittiming->tseg1_max = device_info->tseg1_max; 457 bittiming->tseg2_min = device_info->tseg2_min; 458 bittiming->tseg2_max = device_info->tseg2_max; 459 bittiming->sjw_max = device_info->sjw_max; 460 bittiming->brp_min = le32_to_cpu(device_info->brp_min); 461 bittiming->brp_max = le32_to_cpu(device_info->brp_max); 462 bittiming->brp_inc = le16_to_cpu(device_info->brp_inc); 463 464 ctrlmodes = le16_to_cpu(device_info->ctrlmodes); 465 466 up->can.ctrlmode_supported = 0; 467 468 if (ctrlmodes & UCAN_MODE_LOOPBACK) 469 up->can.ctrlmode_supported |= CAN_CTRLMODE_LOOPBACK; 470 if (ctrlmodes & UCAN_MODE_SILENT) 471 up->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY; 472 if (ctrlmodes & UCAN_MODE_3_SAMPLES) 473 up->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES; 474 if (ctrlmodes & UCAN_MODE_ONE_SHOT) 475 up->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT; 476 if (ctrlmodes & UCAN_MODE_BERR_REPORT) 477 up->can.ctrlmode_supported |= CAN_CTRLMODE_BERR_REPORTING; 478 } 479 480 /* Handle a CAN error frame that we have received from the device. 481 * Returns true if the can state has changed. 482 */ 483 static bool ucan_handle_error_frame(struct ucan_priv *up, 484 struct ucan_message_in *m, 485 canid_t canid) 486 { 487 enum can_state new_state = up->can.state; 488 struct net_device_stats *net_stats = &up->netdev->stats; 489 struct can_device_stats *can_stats = &up->can.can_stats; 490 491 if (canid & CAN_ERR_LOSTARB) 492 can_stats->arbitration_lost++; 493 494 if (canid & CAN_ERR_BUSERROR) 495 can_stats->bus_error++; 496 497 if (canid & CAN_ERR_ACK) 498 net_stats->tx_errors++; 499 500 if (canid & CAN_ERR_BUSOFF) 501 new_state = CAN_STATE_BUS_OFF; 502 503 /* controller problems, details in data[1] */ 504 if (canid & CAN_ERR_CRTL) { 505 u8 d1 = m->msg.can_msg.data[1]; 506 507 if (d1 & CAN_ERR_CRTL_RX_OVERFLOW) 508 net_stats->rx_over_errors++; 509 510 /* controller state bits: if multiple are set the worst wins */ 511 if (d1 & CAN_ERR_CRTL_ACTIVE) 512 new_state = CAN_STATE_ERROR_ACTIVE; 513 514 if (d1 & (CAN_ERR_CRTL_RX_WARNING | CAN_ERR_CRTL_TX_WARNING)) 515 new_state = CAN_STATE_ERROR_WARNING; 516 517 if (d1 & (CAN_ERR_CRTL_RX_PASSIVE | CAN_ERR_CRTL_TX_PASSIVE)) 518 new_state = CAN_STATE_ERROR_PASSIVE; 519 } 520 521 /* protocol error, details in data[2] */ 522 if (canid & CAN_ERR_PROT) { 523 u8 d2 = m->msg.can_msg.data[2]; 524 525 if (d2 & CAN_ERR_PROT_TX) 526 net_stats->tx_errors++; 527 else 528 net_stats->rx_errors++; 529 } 530 531 /* no state change - we are done */ 532 if (up->can.state == new_state) 533 return false; 534 535 /* we switched into a better state */ 536 if (up->can.state > new_state) { 537 up->can.state = new_state; 538 return true; 539 } 540 541 /* we switched into a worse state */ 542 up->can.state = new_state; 543 switch (new_state) { 544 case CAN_STATE_BUS_OFF: 545 can_stats->bus_off++; 546 can_bus_off(up->netdev); 547 break; 548 case CAN_STATE_ERROR_PASSIVE: 549 can_stats->error_passive++; 550 break; 551 case CAN_STATE_ERROR_WARNING: 552 can_stats->error_warning++; 553 break; 554 default: 555 break; 556 } 557 return true; 558 } 559 560 /* Callback on reception of a can frame via the IN endpoint 561 * 562 * This function allocates an skb and transferres it to the Linux 563 * network stack 564 */ 565 static void ucan_rx_can_msg(struct ucan_priv *up, struct ucan_message_in *m) 566 { 567 int len; 568 canid_t canid; 569 struct can_frame *cf; 570 struct sk_buff *skb; 571 struct net_device_stats *stats = &up->netdev->stats; 572 573 /* get the contents of the length field */ 574 len = le16_to_cpu(m->len); 575 576 /* check sanity */ 577 if (len < UCAN_IN_HDR_SIZE + sizeof(m->msg.can_msg.id)) { 578 netdev_warn(up->netdev, "invalid input message len: %d\n", len); 579 return; 580 } 581 582 /* handle error frames */ 583 canid = le32_to_cpu(m->msg.can_msg.id); 584 if (canid & CAN_ERR_FLAG) { 585 bool busstate_changed = ucan_handle_error_frame(up, m, canid); 586 587 /* if berr-reporting is off only state changes get through */ 588 if (!(up->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) && 589 !busstate_changed) 590 return; 591 } else { 592 canid_t canid_mask; 593 /* compute the mask for canid */ 594 canid_mask = CAN_RTR_FLAG; 595 if (canid & CAN_EFF_FLAG) 596 canid_mask |= CAN_EFF_MASK | CAN_EFF_FLAG; 597 else 598 canid_mask |= CAN_SFF_MASK; 599 600 if (canid & ~canid_mask) 601 netdev_warn(up->netdev, 602 "unexpected bits set (canid %x, mask %x)", 603 canid, canid_mask); 604 605 canid &= canid_mask; 606 } 607 608 /* allocate skb */ 609 skb = alloc_can_skb(up->netdev, &cf); 610 if (!skb) 611 return; 612 613 /* fill the can frame */ 614 cf->can_id = canid; 615 616 /* compute DLC taking RTR_FLAG into account */ 617 cf->can_dlc = ucan_get_can_dlc(&m->msg.can_msg, len); 618 619 /* copy the payload of non RTR frames */ 620 if (!(cf->can_id & CAN_RTR_FLAG) || (cf->can_id & CAN_ERR_FLAG)) 621 memcpy(cf->data, m->msg.can_msg.data, cf->can_dlc); 622 623 /* don't count error frames as real packets */ 624 stats->rx_packets++; 625 stats->rx_bytes += cf->can_dlc; 626 627 /* pass it to Linux */ 628 netif_rx(skb); 629 } 630 631 /* callback indicating completed transmission */ 632 static void ucan_tx_complete_msg(struct ucan_priv *up, 633 struct ucan_message_in *m) 634 { 635 unsigned long flags; 636 u16 count, i; 637 u8 echo_index, dlc; 638 u16 len = le16_to_cpu(m->len); 639 640 struct ucan_urb_context *context; 641 642 if (len < UCAN_IN_HDR_SIZE || (len % 2 != 0)) { 643 netdev_err(up->netdev, "invalid tx complete length\n"); 644 return; 645 } 646 647 count = (len - UCAN_IN_HDR_SIZE) / 2; 648 for (i = 0; i < count; i++) { 649 /* we did not submit such echo ids */ 650 echo_index = m->msg.can_tx_complete_msg[i].echo_index; 651 if (echo_index >= up->device_info.tx_fifo) { 652 up->netdev->stats.tx_errors++; 653 netdev_err(up->netdev, 654 "invalid echo_index %d received\n", 655 echo_index); 656 continue; 657 } 658 659 /* gather information from the context */ 660 context = &up->context_array[echo_index]; 661 dlc = READ_ONCE(context->dlc); 662 663 /* Release context and restart queue if necessary. 664 * Also check if the context was allocated 665 */ 666 if (!ucan_release_context(up, context)) 667 continue; 668 669 spin_lock_irqsave(&up->echo_skb_lock, flags); 670 if (m->msg.can_tx_complete_msg[i].flags & 671 UCAN_TX_COMPLETE_SUCCESS) { 672 /* update statistics */ 673 up->netdev->stats.tx_packets++; 674 up->netdev->stats.tx_bytes += dlc; 675 can_get_echo_skb(up->netdev, echo_index); 676 } else { 677 up->netdev->stats.tx_dropped++; 678 can_free_echo_skb(up->netdev, echo_index); 679 } 680 spin_unlock_irqrestore(&up->echo_skb_lock, flags); 681 } 682 } 683 684 /* callback on reception of a USB message */ 685 static void ucan_read_bulk_callback(struct urb *urb) 686 { 687 int ret; 688 int pos; 689 struct ucan_priv *up = urb->context; 690 struct net_device *netdev = up->netdev; 691 struct ucan_message_in *m; 692 693 /* the device is not up and the driver should not receive any 694 * data on the bulk in pipe 695 */ 696 if (WARN_ON(!up->context_array)) { 697 usb_free_coherent(up->udev, 698 up->in_ep_size, 699 urb->transfer_buffer, 700 urb->transfer_dma); 701 return; 702 } 703 704 /* check URB status */ 705 switch (urb->status) { 706 case 0: 707 break; 708 case -ENOENT: 709 case -EPIPE: 710 case -EPROTO: 711 case -ESHUTDOWN: 712 case -ETIME: 713 /* urb is not resubmitted -> free dma data */ 714 usb_free_coherent(up->udev, 715 up->in_ep_size, 716 urb->transfer_buffer, 717 urb->transfer_dma); 718 netdev_dbg(up->netdev, "not resubmitting urb; status: %d\n", 719 urb->status); 720 return; 721 default: 722 goto resubmit; 723 } 724 725 /* sanity check */ 726 if (!netif_device_present(netdev)) 727 return; 728 729 /* iterate over input */ 730 pos = 0; 731 while (pos < urb->actual_length) { 732 int len; 733 734 /* check sanity (length of header) */ 735 if ((urb->actual_length - pos) < UCAN_IN_HDR_SIZE) { 736 netdev_warn(up->netdev, 737 "invalid message (short; no hdr; l:%d)\n", 738 urb->actual_length); 739 goto resubmit; 740 } 741 742 /* setup the message address */ 743 m = (struct ucan_message_in *) 744 ((u8 *)urb->transfer_buffer + pos); 745 len = le16_to_cpu(m->len); 746 747 /* check sanity (length of content) */ 748 if (urb->actual_length - pos < len) { 749 netdev_warn(up->netdev, 750 "invalid message (short; no data; l:%d)\n", 751 urb->actual_length); 752 print_hex_dump(KERN_WARNING, 753 "raw data: ", 754 DUMP_PREFIX_ADDRESS, 755 16, 756 1, 757 urb->transfer_buffer, 758 urb->actual_length, 759 true); 760 761 goto resubmit; 762 } 763 764 switch (m->type) { 765 case UCAN_IN_RX: 766 ucan_rx_can_msg(up, m); 767 break; 768 case UCAN_IN_TX_COMPLETE: 769 ucan_tx_complete_msg(up, m); 770 break; 771 default: 772 netdev_warn(up->netdev, 773 "invalid message (type; t:%d)\n", 774 m->type); 775 break; 776 } 777 778 /* proceed to next message */ 779 pos += len; 780 /* align to 4 byte boundary */ 781 pos = round_up(pos, 4); 782 } 783 784 resubmit: 785 /* resubmit urb when done */ 786 usb_fill_bulk_urb(urb, up->udev, 787 usb_rcvbulkpipe(up->udev, 788 up->in_ep_addr), 789 urb->transfer_buffer, 790 up->in_ep_size, 791 ucan_read_bulk_callback, 792 up); 793 794 usb_anchor_urb(urb, &up->rx_urbs); 795 ret = usb_submit_urb(urb, GFP_ATOMIC); 796 797 if (ret < 0) { 798 netdev_err(up->netdev, 799 "failed resubmitting read bulk urb: %d\n", 800 ret); 801 802 usb_unanchor_urb(urb); 803 usb_free_coherent(up->udev, 804 up->in_ep_size, 805 urb->transfer_buffer, 806 urb->transfer_dma); 807 808 if (ret == -ENODEV) 809 netif_device_detach(netdev); 810 } 811 } 812 813 /* callback after transmission of a USB message */ 814 static void ucan_write_bulk_callback(struct urb *urb) 815 { 816 unsigned long flags; 817 struct ucan_priv *up; 818 struct ucan_urb_context *context = urb->context; 819 820 /* get the urb context */ 821 if (WARN_ON_ONCE(!context)) 822 return; 823 824 /* free up our allocated buffer */ 825 usb_free_coherent(urb->dev, 826 sizeof(struct ucan_message_out), 827 urb->transfer_buffer, 828 urb->transfer_dma); 829 830 up = context->up; 831 if (WARN_ON_ONCE(!up)) 832 return; 833 834 /* sanity check */ 835 if (!netif_device_present(up->netdev)) 836 return; 837 838 /* transmission failed (USB - the device will not send a TX complete) */ 839 if (urb->status) { 840 netdev_warn(up->netdev, 841 "failed to transmit USB message to device: %d\n", 842 urb->status); 843 844 /* update counters an cleanup */ 845 spin_lock_irqsave(&up->echo_skb_lock, flags); 846 can_free_echo_skb(up->netdev, context - up->context_array); 847 spin_unlock_irqrestore(&up->echo_skb_lock, flags); 848 849 up->netdev->stats.tx_dropped++; 850 851 /* release context and restart the queue if necessary */ 852 if (!ucan_release_context(up, context)) 853 netdev_err(up->netdev, 854 "urb failed, failed to release context\n"); 855 } 856 } 857 858 static void ucan_cleanup_rx_urbs(struct ucan_priv *up, struct urb **urbs) 859 { 860 int i; 861 862 for (i = 0; i < UCAN_MAX_RX_URBS; i++) { 863 if (urbs[i]) { 864 usb_unanchor_urb(urbs[i]); 865 usb_free_coherent(up->udev, 866 up->in_ep_size, 867 urbs[i]->transfer_buffer, 868 urbs[i]->transfer_dma); 869 usb_free_urb(urbs[i]); 870 } 871 } 872 873 memset(urbs, 0, sizeof(*urbs) * UCAN_MAX_RX_URBS); 874 } 875 876 static int ucan_prepare_and_anchor_rx_urbs(struct ucan_priv *up, 877 struct urb **urbs) 878 { 879 int i; 880 881 memset(urbs, 0, sizeof(*urbs) * UCAN_MAX_RX_URBS); 882 883 for (i = 0; i < UCAN_MAX_RX_URBS; i++) { 884 void *buf; 885 886 urbs[i] = usb_alloc_urb(0, GFP_KERNEL); 887 if (!urbs[i]) 888 goto err; 889 890 buf = usb_alloc_coherent(up->udev, 891 up->in_ep_size, 892 GFP_KERNEL, &urbs[i]->transfer_dma); 893 if (!buf) { 894 /* cleanup this urb */ 895 usb_free_urb(urbs[i]); 896 urbs[i] = NULL; 897 goto err; 898 } 899 900 usb_fill_bulk_urb(urbs[i], up->udev, 901 usb_rcvbulkpipe(up->udev, 902 up->in_ep_addr), 903 buf, 904 up->in_ep_size, 905 ucan_read_bulk_callback, 906 up); 907 908 urbs[i]->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 909 910 usb_anchor_urb(urbs[i], &up->rx_urbs); 911 } 912 return 0; 913 914 err: 915 /* cleanup other unsubmitted urbs */ 916 ucan_cleanup_rx_urbs(up, urbs); 917 return -ENOMEM; 918 } 919 920 /* Submits rx urbs with the semantic: Either submit all, or cleanup 921 * everything. I case of errors submitted urbs are killed and all urbs in 922 * the array are freed. I case of no errors every entry in the urb 923 * array is set to NULL. 924 */ 925 static int ucan_submit_rx_urbs(struct ucan_priv *up, struct urb **urbs) 926 { 927 int i, ret; 928 929 /* Iterate over all urbs to submit. On success remove the urb 930 * from the list. 931 */ 932 for (i = 0; i < UCAN_MAX_RX_URBS; i++) { 933 ret = usb_submit_urb(urbs[i], GFP_KERNEL); 934 if (ret) { 935 netdev_err(up->netdev, 936 "could not submit urb; code: %d\n", 937 ret); 938 goto err; 939 } 940 941 /* Anchor URB and drop reference, USB core will take 942 * care of freeing it 943 */ 944 usb_free_urb(urbs[i]); 945 urbs[i] = NULL; 946 } 947 return 0; 948 949 err: 950 /* Cleanup unsubmitted urbs */ 951 ucan_cleanup_rx_urbs(up, urbs); 952 953 /* Kill urbs that are already submitted */ 954 usb_kill_anchored_urbs(&up->rx_urbs); 955 956 return ret; 957 } 958 959 /* Open the network device */ 960 static int ucan_open(struct net_device *netdev) 961 { 962 int ret, ret_cleanup; 963 u16 ctrlmode; 964 struct urb *urbs[UCAN_MAX_RX_URBS]; 965 struct ucan_priv *up = netdev_priv(netdev); 966 967 ret = ucan_alloc_context_array(up); 968 if (ret) 969 return ret; 970 971 /* Allocate and prepare IN URBS - allocated and anchored 972 * urbs are stored in urbs[] for clean 973 */ 974 ret = ucan_prepare_and_anchor_rx_urbs(up, urbs); 975 if (ret) 976 goto err_contexts; 977 978 /* Check the control mode */ 979 ctrlmode = 0; 980 if (up->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) 981 ctrlmode |= UCAN_MODE_LOOPBACK; 982 if (up->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) 983 ctrlmode |= UCAN_MODE_SILENT; 984 if (up->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) 985 ctrlmode |= UCAN_MODE_3_SAMPLES; 986 if (up->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT) 987 ctrlmode |= UCAN_MODE_ONE_SHOT; 988 989 /* Enable this in any case - filtering is down within the 990 * receive path 991 */ 992 ctrlmode |= UCAN_MODE_BERR_REPORT; 993 up->ctl_msg_buffer->cmd_start.mode = cpu_to_le16(ctrlmode); 994 995 /* Driver is ready to receive data - start the USB device */ 996 ret = ucan_ctrl_command_out(up, UCAN_COMMAND_START, 0, 2); 997 if (ret < 0) { 998 netdev_err(up->netdev, 999 "could not start device, code: %d\n", 1000 ret); 1001 goto err_reset; 1002 } 1003 1004 /* Call CAN layer open */ 1005 ret = open_candev(netdev); 1006 if (ret) 1007 goto err_stop; 1008 1009 /* Driver is ready to receive data. Submit RX URBS */ 1010 ret = ucan_submit_rx_urbs(up, urbs); 1011 if (ret) 1012 goto err_stop; 1013 1014 up->can.state = CAN_STATE_ERROR_ACTIVE; 1015 1016 /* Start the network queue */ 1017 netif_start_queue(netdev); 1018 1019 return 0; 1020 1021 err_stop: 1022 /* The device have started already stop it */ 1023 ret_cleanup = ucan_ctrl_command_out(up, UCAN_COMMAND_STOP, 0, 0); 1024 if (ret_cleanup < 0) 1025 netdev_err(up->netdev, 1026 "could not stop device, code: %d\n", 1027 ret_cleanup); 1028 1029 err_reset: 1030 /* The device might have received data, reset it for 1031 * consistent state 1032 */ 1033 ret_cleanup = ucan_ctrl_command_out(up, UCAN_COMMAND_RESET, 0, 0); 1034 if (ret_cleanup < 0) 1035 netdev_err(up->netdev, 1036 "could not reset device, code: %d\n", 1037 ret_cleanup); 1038 1039 /* clean up unsubmitted urbs */ 1040 ucan_cleanup_rx_urbs(up, urbs); 1041 1042 err_contexts: 1043 ucan_release_context_array(up); 1044 return ret; 1045 } 1046 1047 static struct urb *ucan_prepare_tx_urb(struct ucan_priv *up, 1048 struct ucan_urb_context *context, 1049 struct can_frame *cf, 1050 u8 echo_index) 1051 { 1052 int mlen; 1053 struct urb *urb; 1054 struct ucan_message_out *m; 1055 1056 /* create a URB, and a buffer for it, and copy the data to the URB */ 1057 urb = usb_alloc_urb(0, GFP_ATOMIC); 1058 if (!urb) { 1059 netdev_err(up->netdev, "no memory left for URBs\n"); 1060 return NULL; 1061 } 1062 1063 m = usb_alloc_coherent(up->udev, 1064 sizeof(struct ucan_message_out), 1065 GFP_ATOMIC, 1066 &urb->transfer_dma); 1067 if (!m) { 1068 netdev_err(up->netdev, "no memory left for USB buffer\n"); 1069 usb_free_urb(urb); 1070 return NULL; 1071 } 1072 1073 /* build the USB message */ 1074 m->type = UCAN_OUT_TX; 1075 m->msg.can_msg.id = cpu_to_le32(cf->can_id); 1076 1077 if (cf->can_id & CAN_RTR_FLAG) { 1078 mlen = UCAN_OUT_HDR_SIZE + 1079 offsetof(struct ucan_can_msg, dlc) + 1080 sizeof(m->msg.can_msg.dlc); 1081 m->msg.can_msg.dlc = cf->can_dlc; 1082 } else { 1083 mlen = UCAN_OUT_HDR_SIZE + 1084 sizeof(m->msg.can_msg.id) + cf->can_dlc; 1085 memcpy(m->msg.can_msg.data, cf->data, cf->can_dlc); 1086 } 1087 m->len = cpu_to_le16(mlen); 1088 1089 context->dlc = cf->can_dlc; 1090 1091 m->subtype = echo_index; 1092 1093 /* build the urb */ 1094 usb_fill_bulk_urb(urb, up->udev, 1095 usb_sndbulkpipe(up->udev, 1096 up->out_ep_addr), 1097 m, mlen, ucan_write_bulk_callback, context); 1098 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 1099 1100 return urb; 1101 } 1102 1103 static void ucan_clean_up_tx_urb(struct ucan_priv *up, struct urb *urb) 1104 { 1105 usb_free_coherent(up->udev, sizeof(struct ucan_message_out), 1106 urb->transfer_buffer, urb->transfer_dma); 1107 usb_free_urb(urb); 1108 } 1109 1110 /* callback when Linux needs to send a can frame */ 1111 static netdev_tx_t ucan_start_xmit(struct sk_buff *skb, 1112 struct net_device *netdev) 1113 { 1114 unsigned long flags; 1115 int ret; 1116 u8 echo_index; 1117 struct urb *urb; 1118 struct ucan_urb_context *context; 1119 struct ucan_priv *up = netdev_priv(netdev); 1120 struct can_frame *cf = (struct can_frame *)skb->data; 1121 1122 /* check skb */ 1123 if (can_dropped_invalid_skb(netdev, skb)) 1124 return NETDEV_TX_OK; 1125 1126 /* allocate a context and slow down tx path, if fifo state is low */ 1127 context = ucan_alloc_context(up); 1128 echo_index = context - up->context_array; 1129 1130 if (WARN_ON_ONCE(!context)) 1131 return NETDEV_TX_BUSY; 1132 1133 /* prepare urb for transmission */ 1134 urb = ucan_prepare_tx_urb(up, context, cf, echo_index); 1135 if (!urb) 1136 goto drop; 1137 1138 /* put the skb on can loopback stack */ 1139 spin_lock_irqsave(&up->echo_skb_lock, flags); 1140 can_put_echo_skb(skb, up->netdev, echo_index); 1141 spin_unlock_irqrestore(&up->echo_skb_lock, flags); 1142 1143 /* transmit it */ 1144 usb_anchor_urb(urb, &up->tx_urbs); 1145 ret = usb_submit_urb(urb, GFP_ATOMIC); 1146 1147 /* cleanup urb */ 1148 if (ret) { 1149 /* on error, clean up */ 1150 usb_unanchor_urb(urb); 1151 ucan_clean_up_tx_urb(up, urb); 1152 if (!ucan_release_context(up, context)) 1153 netdev_err(up->netdev, 1154 "xmit err: failed to release context\n"); 1155 1156 /* remove the skb from the echo stack - this also 1157 * frees the skb 1158 */ 1159 spin_lock_irqsave(&up->echo_skb_lock, flags); 1160 can_free_echo_skb(up->netdev, echo_index); 1161 spin_unlock_irqrestore(&up->echo_skb_lock, flags); 1162 1163 if (ret == -ENODEV) { 1164 netif_device_detach(up->netdev); 1165 } else { 1166 netdev_warn(up->netdev, 1167 "xmit err: failed to submit urb %d\n", 1168 ret); 1169 up->netdev->stats.tx_dropped++; 1170 } 1171 return NETDEV_TX_OK; 1172 } 1173 1174 netif_trans_update(netdev); 1175 1176 /* release ref, as we do not need the urb anymore */ 1177 usb_free_urb(urb); 1178 1179 return NETDEV_TX_OK; 1180 1181 drop: 1182 if (!ucan_release_context(up, context)) 1183 netdev_err(up->netdev, 1184 "xmit drop: failed to release context\n"); 1185 dev_kfree_skb(skb); 1186 up->netdev->stats.tx_dropped++; 1187 1188 return NETDEV_TX_OK; 1189 } 1190 1191 /* Device goes down 1192 * 1193 * Clean up used resources 1194 */ 1195 static int ucan_close(struct net_device *netdev) 1196 { 1197 int ret; 1198 struct ucan_priv *up = netdev_priv(netdev); 1199 1200 up->can.state = CAN_STATE_STOPPED; 1201 1202 /* stop sending data */ 1203 usb_kill_anchored_urbs(&up->tx_urbs); 1204 1205 /* stop receiving data */ 1206 usb_kill_anchored_urbs(&up->rx_urbs); 1207 1208 /* stop and reset can device */ 1209 ret = ucan_ctrl_command_out(up, UCAN_COMMAND_STOP, 0, 0); 1210 if (ret < 0) 1211 netdev_err(up->netdev, 1212 "could not stop device, code: %d\n", 1213 ret); 1214 1215 ret = ucan_ctrl_command_out(up, UCAN_COMMAND_RESET, 0, 0); 1216 if (ret < 0) 1217 netdev_err(up->netdev, 1218 "could not reset device, code: %d\n", 1219 ret); 1220 1221 netif_stop_queue(netdev); 1222 1223 ucan_release_context_array(up); 1224 1225 close_candev(up->netdev); 1226 return 0; 1227 } 1228 1229 /* CAN driver callbacks */ 1230 static const struct net_device_ops ucan_netdev_ops = { 1231 .ndo_open = ucan_open, 1232 .ndo_stop = ucan_close, 1233 .ndo_start_xmit = ucan_start_xmit, 1234 .ndo_change_mtu = can_change_mtu, 1235 }; 1236 1237 /* Request to set bittiming 1238 * 1239 * This function generates an USB set bittiming message and transmits 1240 * it to the device 1241 */ 1242 static int ucan_set_bittiming(struct net_device *netdev) 1243 { 1244 int ret; 1245 struct ucan_priv *up = netdev_priv(netdev); 1246 struct ucan_ctl_cmd_set_bittiming *cmd_set_bittiming; 1247 1248 cmd_set_bittiming = &up->ctl_msg_buffer->cmd_set_bittiming; 1249 cmd_set_bittiming->tq = cpu_to_le32(up->can.bittiming.tq); 1250 cmd_set_bittiming->brp = cpu_to_le16(up->can.bittiming.brp); 1251 cmd_set_bittiming->sample_point = 1252 cpu_to_le16(up->can.bittiming.sample_point); 1253 cmd_set_bittiming->prop_seg = up->can.bittiming.prop_seg; 1254 cmd_set_bittiming->phase_seg1 = up->can.bittiming.phase_seg1; 1255 cmd_set_bittiming->phase_seg2 = up->can.bittiming.phase_seg2; 1256 cmd_set_bittiming->sjw = up->can.bittiming.sjw; 1257 1258 ret = ucan_ctrl_command_out(up, UCAN_COMMAND_SET_BITTIMING, 0, 1259 sizeof(*cmd_set_bittiming)); 1260 return (ret < 0) ? ret : 0; 1261 } 1262 1263 /* Restart the device to get it out of BUS-OFF state. 1264 * Called when the user runs "ip link set can1 type can restart". 1265 */ 1266 static int ucan_set_mode(struct net_device *netdev, enum can_mode mode) 1267 { 1268 int ret; 1269 unsigned long flags; 1270 struct ucan_priv *up = netdev_priv(netdev); 1271 1272 switch (mode) { 1273 case CAN_MODE_START: 1274 netdev_dbg(up->netdev, "restarting device\n"); 1275 1276 ret = ucan_ctrl_command_out(up, UCAN_COMMAND_RESTART, 0, 0); 1277 up->can.state = CAN_STATE_ERROR_ACTIVE; 1278 1279 /* check if queue can be restarted, 1280 * up->available_tx_urbs must be protected by the 1281 * lock 1282 */ 1283 spin_lock_irqsave(&up->context_lock, flags); 1284 1285 if (up->available_tx_urbs > 0) 1286 netif_wake_queue(up->netdev); 1287 1288 spin_unlock_irqrestore(&up->context_lock, flags); 1289 1290 return ret; 1291 default: 1292 return -EOPNOTSUPP; 1293 } 1294 } 1295 1296 /* Probe the device, reset it and gather general device information */ 1297 static int ucan_probe(struct usb_interface *intf, 1298 const struct usb_device_id *id) 1299 { 1300 int ret; 1301 int i; 1302 u32 protocol_version; 1303 struct usb_device *udev; 1304 struct net_device *netdev; 1305 struct usb_host_interface *iface_desc; 1306 struct ucan_priv *up; 1307 struct usb_endpoint_descriptor *ep; 1308 u16 in_ep_size; 1309 u16 out_ep_size; 1310 u8 in_ep_addr; 1311 u8 out_ep_addr; 1312 union ucan_ctl_payload *ctl_msg_buffer; 1313 char firmware_str[sizeof(union ucan_ctl_payload) + 1]; 1314 1315 udev = interface_to_usbdev(intf); 1316 1317 /* Stage 1 - Interface Parsing 1318 * --------------------------- 1319 * 1320 * Identifie the device USB interface descriptor and its 1321 * endpoints. Probing is aborted on errors. 1322 */ 1323 1324 /* check if the interface is sane */ 1325 iface_desc = intf->cur_altsetting; 1326 if (!iface_desc) 1327 return -ENODEV; 1328 1329 dev_info(&udev->dev, 1330 "%s: probing device on interface #%d\n", 1331 UCAN_DRIVER_NAME, 1332 iface_desc->desc.bInterfaceNumber); 1333 1334 /* interface sanity check */ 1335 if (iface_desc->desc.bNumEndpoints != 2) { 1336 dev_err(&udev->dev, 1337 "%s: invalid EP count (%d)", 1338 UCAN_DRIVER_NAME, iface_desc->desc.bNumEndpoints); 1339 goto err_firmware_needs_update; 1340 } 1341 1342 /* check interface endpoints */ 1343 in_ep_addr = 0; 1344 out_ep_addr = 0; 1345 in_ep_size = 0; 1346 out_ep_size = 0; 1347 for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) { 1348 ep = &iface_desc->endpoint[i].desc; 1349 1350 if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) != 0) && 1351 ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == 1352 USB_ENDPOINT_XFER_BULK)) { 1353 /* In Endpoint */ 1354 in_ep_addr = ep->bEndpointAddress; 1355 in_ep_addr &= USB_ENDPOINT_NUMBER_MASK; 1356 in_ep_size = le16_to_cpu(ep->wMaxPacketSize); 1357 } else if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == 1358 0) && 1359 ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == 1360 USB_ENDPOINT_XFER_BULK)) { 1361 /* Out Endpoint */ 1362 out_ep_addr = ep->bEndpointAddress; 1363 out_ep_addr &= USB_ENDPOINT_NUMBER_MASK; 1364 out_ep_size = le16_to_cpu(ep->wMaxPacketSize); 1365 } 1366 } 1367 1368 /* check if interface is sane */ 1369 if (!in_ep_addr || !out_ep_addr) { 1370 dev_err(&udev->dev, "%s: invalid endpoint configuration\n", 1371 UCAN_DRIVER_NAME); 1372 goto err_firmware_needs_update; 1373 } 1374 if (in_ep_size < sizeof(struct ucan_message_in)) { 1375 dev_err(&udev->dev, "%s: invalid in_ep MaxPacketSize\n", 1376 UCAN_DRIVER_NAME); 1377 goto err_firmware_needs_update; 1378 } 1379 if (out_ep_size < sizeof(struct ucan_message_out)) { 1380 dev_err(&udev->dev, "%s: invalid out_ep MaxPacketSize\n", 1381 UCAN_DRIVER_NAME); 1382 goto err_firmware_needs_update; 1383 } 1384 1385 /* Stage 2 - Device Identification 1386 * ------------------------------- 1387 * 1388 * The device interface seems to be a ucan device. Do further 1389 * compatibility checks. On error probing is aborted, on 1390 * success this stage leaves the ctl_msg_buffer with the 1391 * reported contents of a GET_INFO command (supported 1392 * bittimings, tx_fifo depth). This information is used in 1393 * Stage 3 for the final driver initialisation. 1394 */ 1395 1396 /* Prepare Memory for control transferes */ 1397 ctl_msg_buffer = devm_kzalloc(&udev->dev, 1398 sizeof(union ucan_ctl_payload), 1399 GFP_KERNEL); 1400 if (!ctl_msg_buffer) { 1401 dev_err(&udev->dev, 1402 "%s: failed to allocate control pipe memory\n", 1403 UCAN_DRIVER_NAME); 1404 return -ENOMEM; 1405 } 1406 1407 /* get protocol version 1408 * 1409 * note: ucan_ctrl_command_* wrappers cannot be used yet 1410 * because `up` is initialised in Stage 3 1411 */ 1412 ret = usb_control_msg(udev, 1413 usb_rcvctrlpipe(udev, 0), 1414 UCAN_COMMAND_GET, 1415 USB_DIR_IN | USB_TYPE_VENDOR | 1416 USB_RECIP_INTERFACE, 1417 UCAN_COMMAND_GET_PROTOCOL_VERSION, 1418 iface_desc->desc.bInterfaceNumber, 1419 ctl_msg_buffer, 1420 sizeof(union ucan_ctl_payload), 1421 UCAN_USB_CTL_PIPE_TIMEOUT); 1422 1423 /* older firmware version do not support this command - those 1424 * are not supported by this drive 1425 */ 1426 if (ret != 4) { 1427 dev_err(&udev->dev, 1428 "%s: could not read protocol version, ret=%d\n", 1429 UCAN_DRIVER_NAME, ret); 1430 if (ret >= 0) 1431 ret = -EINVAL; 1432 goto err_firmware_needs_update; 1433 } 1434 1435 /* this driver currently supports protocol version 3 only */ 1436 protocol_version = 1437 le32_to_cpu(ctl_msg_buffer->cmd_get_protocol_version.version); 1438 if (protocol_version < UCAN_PROTOCOL_VERSION_MIN || 1439 protocol_version > UCAN_PROTOCOL_VERSION_MAX) { 1440 dev_err(&udev->dev, 1441 "%s: device protocol version %d is not supported\n", 1442 UCAN_DRIVER_NAME, protocol_version); 1443 goto err_firmware_needs_update; 1444 } 1445 1446 /* request the device information and store it in ctl_msg_buffer 1447 * 1448 * note: ucan_ctrl_command_* wrappers cannot be used yet 1449 * because `up` is initialised in Stage 3 1450 */ 1451 ret = usb_control_msg(udev, 1452 usb_rcvctrlpipe(udev, 0), 1453 UCAN_COMMAND_GET, 1454 USB_DIR_IN | USB_TYPE_VENDOR | 1455 USB_RECIP_INTERFACE, 1456 UCAN_COMMAND_GET_INFO, 1457 iface_desc->desc.bInterfaceNumber, 1458 ctl_msg_buffer, 1459 sizeof(ctl_msg_buffer->cmd_get_device_info), 1460 UCAN_USB_CTL_PIPE_TIMEOUT); 1461 1462 if (ret < 0) { 1463 dev_err(&udev->dev, "%s: failed to retrieve device info\n", 1464 UCAN_DRIVER_NAME); 1465 goto err_firmware_needs_update; 1466 } 1467 if (ret < sizeof(ctl_msg_buffer->cmd_get_device_info)) { 1468 dev_err(&udev->dev, "%s: device reported invalid device info\n", 1469 UCAN_DRIVER_NAME); 1470 goto err_firmware_needs_update; 1471 } 1472 if (ctl_msg_buffer->cmd_get_device_info.tx_fifo == 0) { 1473 dev_err(&udev->dev, 1474 "%s: device reported invalid tx-fifo size\n", 1475 UCAN_DRIVER_NAME); 1476 goto err_firmware_needs_update; 1477 } 1478 1479 /* Stage 3 - Driver Initialisation 1480 * ------------------------------- 1481 * 1482 * Register device to Linux, prepare private structures and 1483 * reset the device. 1484 */ 1485 1486 /* allocate driver resources */ 1487 netdev = alloc_candev(sizeof(struct ucan_priv), 1488 ctl_msg_buffer->cmd_get_device_info.tx_fifo); 1489 if (!netdev) { 1490 dev_err(&udev->dev, 1491 "%s: cannot allocate candev\n", UCAN_DRIVER_NAME); 1492 return -ENOMEM; 1493 } 1494 1495 up = netdev_priv(netdev); 1496 1497 /* initialize data */ 1498 up->udev = udev; 1499 up->intf = intf; 1500 up->netdev = netdev; 1501 up->intf_index = iface_desc->desc.bInterfaceNumber; 1502 up->in_ep_addr = in_ep_addr; 1503 up->out_ep_addr = out_ep_addr; 1504 up->in_ep_size = in_ep_size; 1505 up->ctl_msg_buffer = ctl_msg_buffer; 1506 up->context_array = NULL; 1507 up->available_tx_urbs = 0; 1508 1509 up->can.state = CAN_STATE_STOPPED; 1510 up->can.bittiming_const = &up->device_info.bittiming_const; 1511 up->can.do_set_bittiming = ucan_set_bittiming; 1512 up->can.do_set_mode = &ucan_set_mode; 1513 spin_lock_init(&up->context_lock); 1514 spin_lock_init(&up->echo_skb_lock); 1515 netdev->netdev_ops = &ucan_netdev_ops; 1516 1517 usb_set_intfdata(intf, up); 1518 SET_NETDEV_DEV(netdev, &intf->dev); 1519 1520 /* parse device information 1521 * the data retrieved in Stage 2 is still available in 1522 * up->ctl_msg_buffer 1523 */ 1524 ucan_parse_device_info(up, &ctl_msg_buffer->cmd_get_device_info); 1525 1526 /* just print some device information - if available */ 1527 ret = ucan_device_request_in(up, UCAN_DEVICE_GET_FW_STRING, 0, 1528 sizeof(union ucan_ctl_payload)); 1529 if (ret > 0) { 1530 /* copy string while ensuring zero terminiation */ 1531 strncpy(firmware_str, up->ctl_msg_buffer->raw, 1532 sizeof(union ucan_ctl_payload)); 1533 firmware_str[sizeof(union ucan_ctl_payload)] = '\0'; 1534 } else { 1535 strcpy(firmware_str, "unknown"); 1536 } 1537 1538 /* device is compatible, reset it */ 1539 ret = ucan_ctrl_command_out(up, UCAN_COMMAND_RESET, 0, 0); 1540 if (ret < 0) 1541 goto err_free_candev; 1542 1543 init_usb_anchor(&up->rx_urbs); 1544 init_usb_anchor(&up->tx_urbs); 1545 1546 up->can.state = CAN_STATE_STOPPED; 1547 1548 /* register the device */ 1549 ret = register_candev(netdev); 1550 if (ret) 1551 goto err_free_candev; 1552 1553 /* initialisation complete, log device info */ 1554 netdev_info(up->netdev, "registered device\n"); 1555 netdev_info(up->netdev, "firmware string: %s\n", firmware_str); 1556 1557 /* success */ 1558 return 0; 1559 1560 err_free_candev: 1561 free_candev(netdev); 1562 return ret; 1563 1564 err_firmware_needs_update: 1565 dev_err(&udev->dev, 1566 "%s: probe failed; try to update the device firmware\n", 1567 UCAN_DRIVER_NAME); 1568 return -ENODEV; 1569 } 1570 1571 /* disconnect the device */ 1572 static void ucan_disconnect(struct usb_interface *intf) 1573 { 1574 struct ucan_priv *up = usb_get_intfdata(intf); 1575 1576 usb_set_intfdata(intf, NULL); 1577 1578 if (up) { 1579 unregister_netdev(up->netdev); 1580 free_candev(up->netdev); 1581 } 1582 } 1583 1584 static struct usb_device_id ucan_table[] = { 1585 /* Mule (soldered onto compute modules) */ 1586 {USB_DEVICE_INTERFACE_NUMBER(0x2294, 0x425a, 0)}, 1587 /* Seal (standalone USB stick) */ 1588 {USB_DEVICE_INTERFACE_NUMBER(0x2294, 0x425b, 0)}, 1589 {} /* Terminating entry */ 1590 }; 1591 1592 MODULE_DEVICE_TABLE(usb, ucan_table); 1593 /* driver callbacks */ 1594 static struct usb_driver ucan_driver = { 1595 .name = UCAN_DRIVER_NAME, 1596 .probe = ucan_probe, 1597 .disconnect = ucan_disconnect, 1598 .id_table = ucan_table, 1599 }; 1600 1601 module_usb_driver(ucan_driver); 1602 1603 MODULE_LICENSE("GPL v2"); 1604 MODULE_AUTHOR("Martin Elshuber <martin.elshuber@theobroma-systems.com>"); 1605 MODULE_AUTHOR("Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>"); 1606 MODULE_DESCRIPTION("Driver for Theobroma Systems UCAN devices"); 1607