root/drivers/net/can/usb/ucan.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ucan_get_can_dlc
  2. ucan_release_context_array
  3. ucan_alloc_context_array
  4. ucan_alloc_context
  5. ucan_release_context
  6. ucan_ctrl_command_out
  7. ucan_device_request_in
  8. ucan_parse_device_info
  9. ucan_handle_error_frame
  10. ucan_rx_can_msg
  11. ucan_tx_complete_msg
  12. ucan_read_bulk_callback
  13. ucan_write_bulk_callback
  14. ucan_cleanup_rx_urbs
  15. ucan_prepare_and_anchor_rx_urbs
  16. ucan_submit_rx_urbs
  17. ucan_open
  18. ucan_prepare_tx_urb
  19. ucan_clean_up_tx_urb
  20. ucan_start_xmit
  21. ucan_close
  22. ucan_set_bittiming
  23. ucan_set_mode
  24. ucan_probe
  25. ucan_disconnect

   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 connot 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         /* initialze 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");

/* [<][>][^][v][top][bottom][index][help] */