linux/sound/usb/endpoint.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 */
   4
   5#include <linux/gfp.h>
   6#include <linux/init.h>
   7#include <linux/ratelimit.h>
   8#include <linux/usb.h>
   9#include <linux/usb/audio.h>
  10#include <linux/slab.h>
  11
  12#include <sound/core.h>
  13#include <sound/pcm.h>
  14#include <sound/pcm_params.h>
  15
  16#include "usbaudio.h"
  17#include "helper.h"
  18#include "card.h"
  19#include "endpoint.h"
  20#include "pcm.h"
  21#include "quirks.h"
  22
  23#define EP_FLAG_RUNNING         1
  24#define EP_FLAG_STOPPING        2
  25
  26/*
  27 * snd_usb_endpoint is a model that abstracts everything related to an
  28 * USB endpoint and its streaming.
  29 *
  30 * There are functions to activate and deactivate the streaming URBs and
  31 * optional callbacks to let the pcm logic handle the actual content of the
  32 * packets for playback and record. Thus, the bus streaming and the audio
  33 * handlers are fully decoupled.
  34 *
  35 * There are two different types of endpoints in audio applications.
  36 *
  37 * SND_USB_ENDPOINT_TYPE_DATA handles full audio data payload for both
  38 * inbound and outbound traffic.
  39 *
  40 * SND_USB_ENDPOINT_TYPE_SYNC endpoints are for inbound traffic only and
  41 * expect the payload to carry Q10.14 / Q16.16 formatted sync information
  42 * (3 or 4 bytes).
  43 *
  44 * Each endpoint has to be configured prior to being used by calling
  45 * snd_usb_endpoint_set_params().
  46 *
  47 * The model incorporates a reference counting, so that multiple users
  48 * can call snd_usb_endpoint_start() and snd_usb_endpoint_stop(), and
  49 * only the first user will effectively start the URBs, and only the last
  50 * one to stop it will tear the URBs down again.
  51 */
  52
  53/*
  54 * convert a sampling rate into our full speed format (fs/1000 in Q16.16)
  55 * this will overflow at approx 524 kHz
  56 */
  57static inline unsigned get_usb_full_speed_rate(unsigned int rate)
  58{
  59        return ((rate << 13) + 62) / 125;
  60}
  61
  62/*
  63 * convert a sampling rate into USB high speed format (fs/8000 in Q16.16)
  64 * this will overflow at approx 4 MHz
  65 */
  66static inline unsigned get_usb_high_speed_rate(unsigned int rate)
  67{
  68        return ((rate << 10) + 62) / 125;
  69}
  70
  71/*
  72 * release a urb data
  73 */
  74static void release_urb_ctx(struct snd_urb_ctx *u)
  75{
  76        if (u->buffer_size)
  77                usb_free_coherent(u->ep->chip->dev, u->buffer_size,
  78                                  u->urb->transfer_buffer,
  79                                  u->urb->transfer_dma);
  80        usb_free_urb(u->urb);
  81        u->urb = NULL;
  82}
  83
  84static const char *usb_error_string(int err)
  85{
  86        switch (err) {
  87        case -ENODEV:
  88                return "no device";
  89        case -ENOENT:
  90                return "endpoint not enabled";
  91        case -EPIPE:
  92                return "endpoint stalled";
  93        case -ENOSPC:
  94                return "not enough bandwidth";
  95        case -ESHUTDOWN:
  96                return "device disabled";
  97        case -EHOSTUNREACH:
  98                return "device suspended";
  99        case -EINVAL:
 100        case -EAGAIN:
 101        case -EFBIG:
 102        case -EMSGSIZE:
 103                return "internal error";
 104        default:
 105                return "unknown error";
 106        }
 107}
 108
 109/**
 110 * snd_usb_endpoint_implicit_feedback_sink: Report endpoint usage type
 111 *
 112 * @ep: The snd_usb_endpoint
 113 *
 114 * Determine whether an endpoint is driven by an implicit feedback
 115 * data endpoint source.
 116 */
 117int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep)
 118{
 119        return  ep->sync_master &&
 120                ep->sync_master->type == SND_USB_ENDPOINT_TYPE_DATA &&
 121                ep->type == SND_USB_ENDPOINT_TYPE_DATA &&
 122                usb_pipeout(ep->pipe);
 123}
 124
 125/*
 126 * For streaming based on information derived from sync endpoints,
 127 * prepare_outbound_urb_sizes() will call slave_next_packet_size() to
 128 * determine the number of samples to be sent in the next packet.
 129 *
 130 * For implicit feedback, slave_next_packet_size() is unused.
 131 */
 132int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep)
 133{
 134        unsigned long flags;
 135        int ret;
 136
 137        if (ep->fill_max)
 138                return ep->maxframesize;
 139
 140        spin_lock_irqsave(&ep->lock, flags);
 141        ep->phase = (ep->phase & 0xffff)
 142                + (ep->freqm << ep->datainterval);
 143        ret = min(ep->phase >> 16, ep->maxframesize);
 144        spin_unlock_irqrestore(&ep->lock, flags);
 145
 146        return ret;
 147}
 148
 149/*
 150 * For adaptive and synchronous endpoints, prepare_outbound_urb_sizes()
 151 * will call next_packet_size() to determine the number of samples to be
 152 * sent in the next packet.
 153 */
 154int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
 155{
 156        int ret;
 157
 158        if (ep->fill_max)
 159                return ep->maxframesize;
 160
 161        ep->sample_accum += ep->sample_rem;
 162        if (ep->sample_accum >= ep->pps) {
 163                ep->sample_accum -= ep->pps;
 164                ret = ep->packsize[1];
 165        } else {
 166                ret = ep->packsize[0];
 167        }
 168
 169        return ret;
 170}
 171
 172static void retire_outbound_urb(struct snd_usb_endpoint *ep,
 173                                struct snd_urb_ctx *urb_ctx)
 174{
 175        if (ep->retire_data_urb)
 176                ep->retire_data_urb(ep->data_subs, urb_ctx->urb);
 177}
 178
 179static void retire_inbound_urb(struct snd_usb_endpoint *ep,
 180                               struct snd_urb_ctx *urb_ctx)
 181{
 182        struct urb *urb = urb_ctx->urb;
 183
 184        if (unlikely(ep->skip_packets > 0)) {
 185                ep->skip_packets--;
 186                return;
 187        }
 188
 189        if (ep->sync_slave)
 190                snd_usb_handle_sync_urb(ep->sync_slave, ep, urb);
 191
 192        if (ep->retire_data_urb)
 193                ep->retire_data_urb(ep->data_subs, urb);
 194}
 195
 196static void prepare_silent_urb(struct snd_usb_endpoint *ep,
 197                               struct snd_urb_ctx *ctx)
 198{
 199        struct urb *urb = ctx->urb;
 200        unsigned int offs = 0;
 201        unsigned int extra = 0;
 202        __le32 packet_length;
 203        int i;
 204
 205        /* For tx_length_quirk, put packet length at start of packet */
 206        if (ep->chip->tx_length_quirk)
 207                extra = sizeof(packet_length);
 208
 209        for (i = 0; i < ctx->packets; ++i) {
 210                unsigned int offset;
 211                unsigned int length;
 212                int counts;
 213
 214                if (ctx->packet_size[i])
 215                        counts = ctx->packet_size[i];
 216                else if (ep->sync_master)
 217                        counts = snd_usb_endpoint_slave_next_packet_size(ep);
 218                else
 219                        counts = snd_usb_endpoint_next_packet_size(ep);
 220
 221                length = counts * ep->stride; /* number of silent bytes */
 222                offset = offs * ep->stride + extra * i;
 223                urb->iso_frame_desc[i].offset = offset;
 224                urb->iso_frame_desc[i].length = length + extra;
 225                if (extra) {
 226                        packet_length = cpu_to_le32(length);
 227                        memcpy(urb->transfer_buffer + offset,
 228                               &packet_length, sizeof(packet_length));
 229                }
 230                memset(urb->transfer_buffer + offset + extra,
 231                       ep->silence_value, length);
 232                offs += counts;
 233        }
 234
 235        urb->number_of_packets = ctx->packets;
 236        urb->transfer_buffer_length = offs * ep->stride + ctx->packets * extra;
 237}
 238
 239/*
 240 * Prepare a PLAYBACK urb for submission to the bus.
 241 */
 242static void prepare_outbound_urb(struct snd_usb_endpoint *ep,
 243                                 struct snd_urb_ctx *ctx)
 244{
 245        struct urb *urb = ctx->urb;
 246        unsigned char *cp = urb->transfer_buffer;
 247
 248        urb->dev = ep->chip->dev; /* we need to set this at each time */
 249
 250        switch (ep->type) {
 251        case SND_USB_ENDPOINT_TYPE_DATA:
 252                if (ep->prepare_data_urb) {
 253                        ep->prepare_data_urb(ep->data_subs, urb);
 254                } else {
 255                        /* no data provider, so send silence */
 256                        prepare_silent_urb(ep, ctx);
 257                }
 258                break;
 259
 260        case SND_USB_ENDPOINT_TYPE_SYNC:
 261                if (snd_usb_get_speed(ep->chip->dev) >= USB_SPEED_HIGH) {
 262                        /*
 263                         * fill the length and offset of each urb descriptor.
 264                         * the fixed 12.13 frequency is passed as 16.16 through the pipe.
 265                         */
 266                        urb->iso_frame_desc[0].length = 4;
 267                        urb->iso_frame_desc[0].offset = 0;
 268                        cp[0] = ep->freqn;
 269                        cp[1] = ep->freqn >> 8;
 270                        cp[2] = ep->freqn >> 16;
 271                        cp[3] = ep->freqn >> 24;
 272                } else {
 273                        /*
 274                         * fill the length and offset of each urb descriptor.
 275                         * the fixed 10.14 frequency is passed through the pipe.
 276                         */
 277                        urb->iso_frame_desc[0].length = 3;
 278                        urb->iso_frame_desc[0].offset = 0;
 279                        cp[0] = ep->freqn >> 2;
 280                        cp[1] = ep->freqn >> 10;
 281                        cp[2] = ep->freqn >> 18;
 282                }
 283
 284                break;
 285        }
 286}
 287
 288/*
 289 * Prepare a CAPTURE or SYNC urb for submission to the bus.
 290 */
 291static inline void prepare_inbound_urb(struct snd_usb_endpoint *ep,
 292                                       struct snd_urb_ctx *urb_ctx)
 293{
 294        int i, offs;
 295        struct urb *urb = urb_ctx->urb;
 296
 297        urb->dev = ep->chip->dev; /* we need to set this at each time */
 298
 299        switch (ep->type) {
 300        case SND_USB_ENDPOINT_TYPE_DATA:
 301                offs = 0;
 302                for (i = 0; i < urb_ctx->packets; i++) {
 303                        urb->iso_frame_desc[i].offset = offs;
 304                        urb->iso_frame_desc[i].length = ep->curpacksize;
 305                        offs += ep->curpacksize;
 306                }
 307
 308                urb->transfer_buffer_length = offs;
 309                urb->number_of_packets = urb_ctx->packets;
 310                break;
 311
 312        case SND_USB_ENDPOINT_TYPE_SYNC:
 313                urb->iso_frame_desc[0].length = min(4u, ep->syncmaxsize);
 314                urb->iso_frame_desc[0].offset = 0;
 315                break;
 316        }
 317}
 318
 319/*
 320 * Send output urbs that have been prepared previously. URBs are dequeued
 321 * from ep->ready_playback_urbs and in case there there aren't any available
 322 * or there are no packets that have been prepared, this function does
 323 * nothing.
 324 *
 325 * The reason why the functionality of sending and preparing URBs is separated
 326 * is that host controllers don't guarantee the order in which they return
 327 * inbound and outbound packets to their submitters.
 328 *
 329 * This function is only used for implicit feedback endpoints. For endpoints
 330 * driven by dedicated sync endpoints, URBs are immediately re-submitted
 331 * from their completion handler.
 332 */
 333static void queue_pending_output_urbs(struct snd_usb_endpoint *ep)
 334{
 335        while (test_bit(EP_FLAG_RUNNING, &ep->flags)) {
 336
 337                unsigned long flags;
 338                struct snd_usb_packet_info *packet;
 339                struct snd_urb_ctx *ctx = NULL;
 340                int err, i;
 341
 342                spin_lock_irqsave(&ep->lock, flags);
 343                if (ep->next_packet_read_pos != ep->next_packet_write_pos) {
 344                        packet = ep->next_packet + ep->next_packet_read_pos;
 345                        ep->next_packet_read_pos++;
 346                        ep->next_packet_read_pos %= MAX_URBS;
 347
 348                        /* take URB out of FIFO */
 349                        if (!list_empty(&ep->ready_playback_urbs)) {
 350                                ctx = list_first_entry(&ep->ready_playback_urbs,
 351                                               struct snd_urb_ctx, ready_list);
 352                                list_del_init(&ctx->ready_list);
 353                        }
 354                }
 355                spin_unlock_irqrestore(&ep->lock, flags);
 356
 357                if (ctx == NULL)
 358                        return;
 359
 360                /* copy over the length information */
 361                for (i = 0; i < packet->packets; i++)
 362                        ctx->packet_size[i] = packet->packet_size[i];
 363
 364                /* call the data handler to fill in playback data */
 365                prepare_outbound_urb(ep, ctx);
 366
 367                err = usb_submit_urb(ctx->urb, GFP_ATOMIC);
 368                if (err < 0)
 369                        usb_audio_err(ep->chip,
 370                                "Unable to submit urb #%d: %d (urb %p)\n",
 371                                ctx->index, err, ctx->urb);
 372                else
 373                        set_bit(ctx->index, &ep->active_mask);
 374        }
 375}
 376
 377/*
 378 * complete callback for urbs
 379 */
 380static void snd_complete_urb(struct urb *urb)
 381{
 382        struct snd_urb_ctx *ctx = urb->context;
 383        struct snd_usb_endpoint *ep = ctx->ep;
 384        struct snd_pcm_substream *substream;
 385        unsigned long flags;
 386        int err;
 387
 388        if (unlikely(urb->status == -ENOENT ||          /* unlinked */
 389                     urb->status == -ENODEV ||          /* device removed */
 390                     urb->status == -ECONNRESET ||      /* unlinked */
 391                     urb->status == -ESHUTDOWN))        /* device disabled */
 392                goto exit_clear;
 393        /* device disconnected */
 394        if (unlikely(atomic_read(&ep->chip->shutdown)))
 395                goto exit_clear;
 396
 397        if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
 398                goto exit_clear;
 399
 400        if (usb_pipeout(ep->pipe)) {
 401                retire_outbound_urb(ep, ctx);
 402                /* can be stopped during retire callback */
 403                if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
 404                        goto exit_clear;
 405
 406                if (snd_usb_endpoint_implicit_feedback_sink(ep)) {
 407                        spin_lock_irqsave(&ep->lock, flags);
 408                        list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs);
 409                        spin_unlock_irqrestore(&ep->lock, flags);
 410                        queue_pending_output_urbs(ep);
 411
 412                        goto exit_clear;
 413                }
 414
 415                prepare_outbound_urb(ep, ctx);
 416                /* can be stopped during prepare callback */
 417                if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
 418                        goto exit_clear;
 419        } else {
 420                retire_inbound_urb(ep, ctx);
 421                /* can be stopped during retire callback */
 422                if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
 423                        goto exit_clear;
 424
 425                prepare_inbound_urb(ep, ctx);
 426        }
 427
 428        err = usb_submit_urb(urb, GFP_ATOMIC);
 429        if (err == 0)
 430                return;
 431
 432        usb_audio_err(ep->chip, "cannot submit urb (err = %d)\n", err);
 433        if (ep->data_subs && ep->data_subs->pcm_substream) {
 434                substream = ep->data_subs->pcm_substream;
 435                snd_pcm_stop_xrun(substream);
 436        }
 437
 438exit_clear:
 439        clear_bit(ctx->index, &ep->active_mask);
 440}
 441
 442/**
 443 * snd_usb_add_endpoint: Add an endpoint to an USB audio chip
 444 *
 445 * @chip: The chip
 446 * @alts: The USB host interface
 447 * @ep_num: The number of the endpoint to use
 448 * @direction: SNDRV_PCM_STREAM_PLAYBACK or SNDRV_PCM_STREAM_CAPTURE
 449 * @type: SND_USB_ENDPOINT_TYPE_DATA or SND_USB_ENDPOINT_TYPE_SYNC
 450 *
 451 * If the requested endpoint has not been added to the given chip before,
 452 * a new instance is created. Otherwise, a pointer to the previoulsy
 453 * created instance is returned. In case of any error, NULL is returned.
 454 *
 455 * New endpoints will be added to chip->ep_list and must be freed by
 456 * calling snd_usb_endpoint_free().
 457 *
 458 * For SND_USB_ENDPOINT_TYPE_SYNC, the caller needs to guarantee that
 459 * bNumEndpoints > 1 beforehand.
 460 */
 461struct snd_usb_endpoint *snd_usb_add_endpoint(struct snd_usb_audio *chip,
 462                                              struct usb_host_interface *alts,
 463                                              int ep_num, int direction, int type)
 464{
 465        struct snd_usb_endpoint *ep;
 466        int is_playback = direction == SNDRV_PCM_STREAM_PLAYBACK;
 467
 468        if (WARN_ON(!alts))
 469                return NULL;
 470
 471        mutex_lock(&chip->mutex);
 472
 473        list_for_each_entry(ep, &chip->ep_list, list) {
 474                if (ep->ep_num == ep_num &&
 475                    ep->iface == alts->desc.bInterfaceNumber &&
 476                    ep->altsetting == alts->desc.bAlternateSetting) {
 477                        usb_audio_dbg(ep->chip,
 478                                      "Re-using EP %x in iface %d,%d @%p\n",
 479                                        ep_num, ep->iface, ep->altsetting, ep);
 480                        goto __exit_unlock;
 481                }
 482        }
 483
 484        usb_audio_dbg(chip, "Creating new %s %s endpoint #%x\n",
 485                    is_playback ? "playback" : "capture",
 486                    type == SND_USB_ENDPOINT_TYPE_DATA ? "data" : "sync",
 487                    ep_num);
 488
 489        ep = kzalloc(sizeof(*ep), GFP_KERNEL);
 490        if (!ep)
 491                goto __exit_unlock;
 492
 493        ep->chip = chip;
 494        spin_lock_init(&ep->lock);
 495        ep->type = type;
 496        ep->ep_num = ep_num;
 497        ep->iface = alts->desc.bInterfaceNumber;
 498        ep->altsetting = alts->desc.bAlternateSetting;
 499        INIT_LIST_HEAD(&ep->ready_playback_urbs);
 500        ep_num &= USB_ENDPOINT_NUMBER_MASK;
 501
 502        if (is_playback)
 503                ep->pipe = usb_sndisocpipe(chip->dev, ep_num);
 504        else
 505                ep->pipe = usb_rcvisocpipe(chip->dev, ep_num);
 506
 507        if (type == SND_USB_ENDPOINT_TYPE_SYNC) {
 508                if (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
 509                    get_endpoint(alts, 1)->bRefresh >= 1 &&
 510                    get_endpoint(alts, 1)->bRefresh <= 9)
 511                        ep->syncinterval = get_endpoint(alts, 1)->bRefresh;
 512                else if (snd_usb_get_speed(chip->dev) == USB_SPEED_FULL)
 513                        ep->syncinterval = 1;
 514                else if (get_endpoint(alts, 1)->bInterval >= 1 &&
 515                         get_endpoint(alts, 1)->bInterval <= 16)
 516                        ep->syncinterval = get_endpoint(alts, 1)->bInterval - 1;
 517                else
 518                        ep->syncinterval = 3;
 519
 520                ep->syncmaxsize = le16_to_cpu(get_endpoint(alts, 1)->wMaxPacketSize);
 521        }
 522
 523        list_add_tail(&ep->list, &chip->ep_list);
 524
 525        ep->is_implicit_feedback = 0;
 526
 527__exit_unlock:
 528        mutex_unlock(&chip->mutex);
 529
 530        return ep;
 531}
 532
 533/*
 534 *  wait until all urbs are processed.
 535 */
 536static int wait_clear_urbs(struct snd_usb_endpoint *ep)
 537{
 538        unsigned long end_time = jiffies + msecs_to_jiffies(1000);
 539        int alive;
 540
 541        do {
 542                alive = bitmap_weight(&ep->active_mask, ep->nurbs);
 543                if (!alive)
 544                        break;
 545
 546                schedule_timeout_uninterruptible(1);
 547        } while (time_before(jiffies, end_time));
 548
 549        if (alive)
 550                usb_audio_err(ep->chip,
 551                        "timeout: still %d active urbs on EP #%x\n",
 552                        alive, ep->ep_num);
 553        clear_bit(EP_FLAG_STOPPING, &ep->flags);
 554
 555        ep->data_subs = NULL;
 556        ep->sync_slave = NULL;
 557        ep->retire_data_urb = NULL;
 558        ep->prepare_data_urb = NULL;
 559
 560        return 0;
 561}
 562
 563/* sync the pending stop operation;
 564 * this function itself doesn't trigger the stop operation
 565 */
 566void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep)
 567{
 568        if (ep && test_bit(EP_FLAG_STOPPING, &ep->flags))
 569                wait_clear_urbs(ep);
 570}
 571
 572/*
 573 * unlink active urbs.
 574 */
 575static int deactivate_urbs(struct snd_usb_endpoint *ep, bool force)
 576{
 577        unsigned int i;
 578
 579        if (!force && atomic_read(&ep->chip->shutdown)) /* to be sure... */
 580                return -EBADFD;
 581
 582        clear_bit(EP_FLAG_RUNNING, &ep->flags);
 583
 584        INIT_LIST_HEAD(&ep->ready_playback_urbs);
 585        ep->next_packet_read_pos = 0;
 586        ep->next_packet_write_pos = 0;
 587
 588        for (i = 0; i < ep->nurbs; i++) {
 589                if (test_bit(i, &ep->active_mask)) {
 590                        if (!test_and_set_bit(i, &ep->unlink_mask)) {
 591                                struct urb *u = ep->urb[i].urb;
 592                                usb_unlink_urb(u);
 593                        }
 594                }
 595        }
 596
 597        return 0;
 598}
 599
 600/*
 601 * release an endpoint's urbs
 602 */
 603static void release_urbs(struct snd_usb_endpoint *ep, int force)
 604{
 605        int i;
 606
 607        /* route incoming urbs to nirvana */
 608        ep->retire_data_urb = NULL;
 609        ep->prepare_data_urb = NULL;
 610
 611        /* stop urbs */
 612        deactivate_urbs(ep, force);
 613        wait_clear_urbs(ep);
 614
 615        for (i = 0; i < ep->nurbs; i++)
 616                release_urb_ctx(&ep->urb[i]);
 617
 618        usb_free_coherent(ep->chip->dev, SYNC_URBS * 4,
 619                          ep->syncbuf, ep->sync_dma);
 620
 621        ep->syncbuf = NULL;
 622        ep->nurbs = 0;
 623}
 624
 625/*
 626 * Check data endpoint for format differences
 627 */
 628static bool check_ep_params(struct snd_usb_endpoint *ep,
 629                              snd_pcm_format_t pcm_format,
 630                              unsigned int channels,
 631                              unsigned int period_bytes,
 632                              unsigned int frames_per_period,
 633                              unsigned int periods_per_buffer,
 634                              struct audioformat *fmt,
 635                              struct snd_usb_endpoint *sync_ep)
 636{
 637        unsigned int maxsize, minsize, packs_per_ms, max_packs_per_urb;
 638        unsigned int max_packs_per_period, urbs_per_period, urb_packs;
 639        unsigned int max_urbs;
 640        int frame_bits = snd_pcm_format_physical_width(pcm_format) * channels;
 641        int tx_length_quirk = (ep->chip->tx_length_quirk &&
 642                               usb_pipeout(ep->pipe));
 643        bool ret = 1;
 644
 645        if (pcm_format == SNDRV_PCM_FORMAT_DSD_U16_LE && fmt->dsd_dop) {
 646                /*
 647                 * When operating in DSD DOP mode, the size of a sample frame
 648                 * in hardware differs from the actual physical format width
 649                 * because we need to make room for the DOP markers.
 650                 */
 651                frame_bits += channels << 3;
 652        }
 653
 654        ret = ret && (ep->datainterval == fmt->datainterval);
 655        ret = ret && (ep->stride == frame_bits >> 3);
 656
 657        switch (pcm_format) {
 658        case SNDRV_PCM_FORMAT_U8:
 659                ret = ret && (ep->silence_value == 0x80);
 660                break;
 661        case SNDRV_PCM_FORMAT_DSD_U8:
 662        case SNDRV_PCM_FORMAT_DSD_U16_LE:
 663        case SNDRV_PCM_FORMAT_DSD_U32_LE:
 664        case SNDRV_PCM_FORMAT_DSD_U16_BE:
 665        case SNDRV_PCM_FORMAT_DSD_U32_BE:
 666                ret = ret && (ep->silence_value == 0x69);
 667                break;
 668        default:
 669                ret = ret && (ep->silence_value == 0);
 670        }
 671
 672        /* assume max. frequency is 50% higher than nominal */
 673        ret = ret && (ep->freqmax == ep->freqn + (ep->freqn >> 1));
 674        /* Round up freqmax to nearest integer in order to calculate maximum
 675         * packet size, which must represent a whole number of frames.
 676         * This is accomplished by adding 0x0.ffff before converting the
 677         * Q16.16 format into integer.
 678         * In order to accurately calculate the maximum packet size when
 679         * the data interval is more than 1 (i.e. ep->datainterval > 0),
 680         * multiply by the data interval prior to rounding. For instance,
 681         * a freqmax of 41 kHz will result in a max packet size of 6 (5.125)
 682         * frames with a data interval of 1, but 11 (10.25) frames with a
 683         * data interval of 2.
 684         * (ep->freqmax << ep->datainterval overflows at 8.192 MHz for the
 685         * maximum datainterval value of 3, at USB full speed, higher for
 686         * USB high speed, noting that ep->freqmax is in units of
 687         * frames per packet in Q16.16 format.)
 688         */
 689        maxsize = (((ep->freqmax << ep->datainterval) + 0xffff) >> 16) *
 690                         (frame_bits >> 3);
 691        if (tx_length_quirk)
 692                maxsize += sizeof(__le32); /* Space for length descriptor */
 693        /* but wMaxPacketSize might reduce this */
 694        if (ep->maxpacksize && ep->maxpacksize < maxsize) {
 695                /* whatever fits into a max. size packet */
 696                unsigned int data_maxsize = maxsize = ep->maxpacksize;
 697
 698                if (tx_length_quirk)
 699                        /* Need to remove the length descriptor to calc freq */
 700                        data_maxsize -= sizeof(__le32);
 701                ret = ret && (ep->freqmax == (data_maxsize / (frame_bits >> 3))
 702                                << (16 - ep->datainterval));
 703        }
 704
 705        if (ep->fill_max)
 706                ret = ret && (ep->curpacksize == ep->maxpacksize);
 707        else
 708                ret = ret && (ep->curpacksize == maxsize);
 709
 710        if (snd_usb_get_speed(ep->chip->dev) != USB_SPEED_FULL) {
 711                packs_per_ms = 8 >> ep->datainterval;
 712                max_packs_per_urb = MAX_PACKS_HS;
 713        } else {
 714                packs_per_ms = 1;
 715                max_packs_per_urb = MAX_PACKS;
 716        }
 717        if (sync_ep && !snd_usb_endpoint_implicit_feedback_sink(ep))
 718                max_packs_per_urb = min(max_packs_per_urb,
 719                                        1U << sync_ep->syncinterval);
 720        max_packs_per_urb = max(1u, max_packs_per_urb >> ep->datainterval);
 721
 722        /*
 723         * Capture endpoints need to use small URBs because there's no way
 724         * to tell in advance where the next period will end, and we don't
 725         * want the next URB to complete much after the period ends.
 726         *
 727         * Playback endpoints with implicit sync much use the same parameters
 728         * as their corresponding capture endpoint.
 729         */
 730        if (usb_pipein(ep->pipe) ||
 731                        snd_usb_endpoint_implicit_feedback_sink(ep)) {
 732
 733                urb_packs = packs_per_ms;
 734                /*
 735                 * Wireless devices can poll at a max rate of once per 4ms.
 736                 * For dataintervals less than 5, increase the packet count to
 737                 * allow the host controller to use bursting to fill in the
 738                 * gaps.
 739                 */
 740                if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_WIRELESS) {
 741                        int interval = ep->datainterval;
 742
 743                        while (interval < 5) {
 744                                urb_packs <<= 1;
 745                                ++interval;
 746                        }
 747                }
 748                /* make capture URBs <= 1 ms and smaller than a period */
 749                urb_packs = min(max_packs_per_urb, urb_packs);
 750                while (urb_packs > 1 && urb_packs * maxsize >= period_bytes)
 751                        urb_packs >>= 1;
 752                ret = ret && (ep->nurbs == MAX_URBS);
 753
 754        /*
 755         * Playback endpoints without implicit sync are adjusted so that
 756         * a period fits as evenly as possible in the smallest number of
 757         * URBs.  The total number of URBs is adjusted to the size of the
 758         * ALSA buffer, subject to the MAX_URBS and MAX_QUEUE limits.
 759         */
 760        } else {
 761                /* determine how small a packet can be */
 762                minsize = (ep->freqn >> (16 - ep->datainterval)) *
 763                                (frame_bits >> 3);
 764                /* with sync from device, assume it can be 12% lower */
 765                if (sync_ep)
 766                        minsize -= minsize >> 3;
 767                minsize = max(minsize, 1u);
 768
 769                /* how many packets will contain an entire ALSA period? */
 770                max_packs_per_period = DIV_ROUND_UP(period_bytes, minsize);
 771
 772                /* how many URBs will contain a period? */
 773                urbs_per_period = DIV_ROUND_UP(max_packs_per_period,
 774                                max_packs_per_urb);
 775                /* how many packets are needed in each URB? */
 776                urb_packs = DIV_ROUND_UP(max_packs_per_period, urbs_per_period);
 777
 778                /* limit the number of frames in a single URB */
 779                ret = ret && (ep->max_urb_frames ==
 780                        DIV_ROUND_UP(frames_per_period, urbs_per_period));
 781
 782                /* try to use enough URBs to contain an entire ALSA buffer */
 783                max_urbs = min((unsigned) MAX_URBS,
 784                                MAX_QUEUE * packs_per_ms / urb_packs);
 785                ret = ret && (ep->nurbs == min(max_urbs,
 786                                urbs_per_period * periods_per_buffer));
 787        }
 788
 789        ret = ret && (ep->datainterval == fmt->datainterval);
 790        ret = ret && (ep->maxpacksize == fmt->maxpacksize);
 791        ret = ret &&
 792                (ep->fill_max == !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX));
 793
 794        return ret;
 795}
 796
 797/*
 798 * configure a data endpoint
 799 */
 800static int data_ep_set_params(struct snd_usb_endpoint *ep,
 801                              snd_pcm_format_t pcm_format,
 802                              unsigned int channels,
 803                              unsigned int period_bytes,
 804                              unsigned int frames_per_period,
 805                              unsigned int periods_per_buffer,
 806                              struct audioformat *fmt,
 807                              struct snd_usb_endpoint *sync_ep)
 808{
 809        unsigned int maxsize, minsize, packs_per_ms, max_packs_per_urb;
 810        unsigned int max_packs_per_period, urbs_per_period, urb_packs;
 811        unsigned int max_urbs, i;
 812        int frame_bits = snd_pcm_format_physical_width(pcm_format) * channels;
 813        int tx_length_quirk = (ep->chip->tx_length_quirk &&
 814                               usb_pipeout(ep->pipe));
 815
 816        if (pcm_format == SNDRV_PCM_FORMAT_DSD_U16_LE && fmt->dsd_dop) {
 817                /*
 818                 * When operating in DSD DOP mode, the size of a sample frame
 819                 * in hardware differs from the actual physical format width
 820                 * because we need to make room for the DOP markers.
 821                 */
 822                frame_bits += channels << 3;
 823        }
 824
 825        ep->datainterval = fmt->datainterval;
 826        ep->stride = frame_bits >> 3;
 827
 828        switch (pcm_format) {
 829        case SNDRV_PCM_FORMAT_U8:
 830                ep->silence_value = 0x80;
 831                break;
 832        case SNDRV_PCM_FORMAT_DSD_U8:
 833        case SNDRV_PCM_FORMAT_DSD_U16_LE:
 834        case SNDRV_PCM_FORMAT_DSD_U32_LE:
 835        case SNDRV_PCM_FORMAT_DSD_U16_BE:
 836        case SNDRV_PCM_FORMAT_DSD_U32_BE:
 837                ep->silence_value = 0x69;
 838                break;
 839        default:
 840                ep->silence_value = 0;
 841        }
 842
 843        /* assume max. frequency is 50% higher than nominal */
 844        ep->freqmax = ep->freqn + (ep->freqn >> 1);
 845        /* Round up freqmax to nearest integer in order to calculate maximum
 846         * packet size, which must represent a whole number of frames.
 847         * This is accomplished by adding 0x0.ffff before converting the
 848         * Q16.16 format into integer.
 849         * In order to accurately calculate the maximum packet size when
 850         * the data interval is more than 1 (i.e. ep->datainterval > 0),
 851         * multiply by the data interval prior to rounding. For instance,
 852         * a freqmax of 41 kHz will result in a max packet size of 6 (5.125)
 853         * frames with a data interval of 1, but 11 (10.25) frames with a
 854         * data interval of 2.
 855         * (ep->freqmax << ep->datainterval overflows at 8.192 MHz for the
 856         * maximum datainterval value of 3, at USB full speed, higher for
 857         * USB high speed, noting that ep->freqmax is in units of
 858         * frames per packet in Q16.16 format.)
 859         */
 860        maxsize = (((ep->freqmax << ep->datainterval) + 0xffff) >> 16) *
 861                         (frame_bits >> 3);
 862        if (tx_length_quirk)
 863                maxsize += sizeof(__le32); /* Space for length descriptor */
 864        /* but wMaxPacketSize might reduce this */
 865        if (ep->maxpacksize && ep->maxpacksize < maxsize) {
 866                /* whatever fits into a max. size packet */
 867                unsigned int data_maxsize = maxsize = ep->maxpacksize;
 868
 869                if (tx_length_quirk)
 870                        /* Need to remove the length descriptor to calc freq */
 871                        data_maxsize -= sizeof(__le32);
 872                ep->freqmax = (data_maxsize / (frame_bits >> 3))
 873                                << (16 - ep->datainterval);
 874        }
 875
 876        if (ep->fill_max)
 877                ep->curpacksize = ep->maxpacksize;
 878        else
 879                ep->curpacksize = maxsize;
 880
 881        if (snd_usb_get_speed(ep->chip->dev) != USB_SPEED_FULL) {
 882                packs_per_ms = 8 >> ep->datainterval;
 883                max_packs_per_urb = MAX_PACKS_HS;
 884        } else {
 885                packs_per_ms = 1;
 886                max_packs_per_urb = MAX_PACKS;
 887        }
 888        if (sync_ep && !snd_usb_endpoint_implicit_feedback_sink(ep))
 889                max_packs_per_urb = min(max_packs_per_urb,
 890                                        1U << sync_ep->syncinterval);
 891        max_packs_per_urb = max(1u, max_packs_per_urb >> ep->datainterval);
 892
 893        /*
 894         * Capture endpoints need to use small URBs because there's no way
 895         * to tell in advance where the next period will end, and we don't
 896         * want the next URB to complete much after the period ends.
 897         *
 898         * Playback endpoints with implicit sync much use the same parameters
 899         * as their corresponding capture endpoint.
 900         */
 901        if (usb_pipein(ep->pipe) ||
 902                        snd_usb_endpoint_implicit_feedback_sink(ep)) {
 903
 904                urb_packs = packs_per_ms;
 905                /*
 906                 * Wireless devices can poll at a max rate of once per 4ms.
 907                 * For dataintervals less than 5, increase the packet count to
 908                 * allow the host controller to use bursting to fill in the
 909                 * gaps.
 910                 */
 911                if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_WIRELESS) {
 912                        int interval = ep->datainterval;
 913                        while (interval < 5) {
 914                                urb_packs <<= 1;
 915                                ++interval;
 916                        }
 917                }
 918                /* make capture URBs <= 1 ms and smaller than a period */
 919                urb_packs = min(max_packs_per_urb, urb_packs);
 920                while (urb_packs > 1 && urb_packs * maxsize >= period_bytes)
 921                        urb_packs >>= 1;
 922                ep->nurbs = MAX_URBS;
 923
 924        /*
 925         * Playback endpoints without implicit sync are adjusted so that
 926         * a period fits as evenly as possible in the smallest number of
 927         * URBs.  The total number of URBs is adjusted to the size of the
 928         * ALSA buffer, subject to the MAX_URBS and MAX_QUEUE limits.
 929         */
 930        } else {
 931                /* determine how small a packet can be */
 932                minsize = (ep->freqn >> (16 - ep->datainterval)) *
 933                                (frame_bits >> 3);
 934                /* with sync from device, assume it can be 12% lower */
 935                if (sync_ep)
 936                        minsize -= minsize >> 3;
 937                minsize = max(minsize, 1u);
 938
 939                /* how many packets will contain an entire ALSA period? */
 940                max_packs_per_period = DIV_ROUND_UP(period_bytes, minsize);
 941
 942                /* how many URBs will contain a period? */
 943                urbs_per_period = DIV_ROUND_UP(max_packs_per_period,
 944                                max_packs_per_urb);
 945                /* how many packets are needed in each URB? */
 946                urb_packs = DIV_ROUND_UP(max_packs_per_period, urbs_per_period);
 947
 948                /* limit the number of frames in a single URB */
 949                ep->max_urb_frames = DIV_ROUND_UP(frames_per_period,
 950                                        urbs_per_period);
 951
 952                /* try to use enough URBs to contain an entire ALSA buffer */
 953                max_urbs = min((unsigned) MAX_URBS,
 954                                MAX_QUEUE * packs_per_ms / urb_packs);
 955                ep->nurbs = min(max_urbs, urbs_per_period * periods_per_buffer);
 956        }
 957
 958        /* allocate and initialize data urbs */
 959        for (i = 0; i < ep->nurbs; i++) {
 960                struct snd_urb_ctx *u = &ep->urb[i];
 961                u->index = i;
 962                u->ep = ep;
 963                u->packets = urb_packs;
 964                u->buffer_size = maxsize * u->packets;
 965
 966                if (fmt->fmt_type == UAC_FORMAT_TYPE_II)
 967                        u->packets++; /* for transfer delimiter */
 968                u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
 969                if (!u->urb)
 970                        goto out_of_memory;
 971
 972                u->urb->transfer_buffer =
 973                        usb_alloc_coherent(ep->chip->dev, u->buffer_size,
 974                                           GFP_KERNEL, &u->urb->transfer_dma);
 975                if (!u->urb->transfer_buffer)
 976                        goto out_of_memory;
 977                u->urb->pipe = ep->pipe;
 978                u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
 979                u->urb->interval = 1 << ep->datainterval;
 980                u->urb->context = u;
 981                u->urb->complete = snd_complete_urb;
 982                INIT_LIST_HEAD(&u->ready_list);
 983        }
 984
 985        return 0;
 986
 987out_of_memory:
 988        release_urbs(ep, 0);
 989        return -ENOMEM;
 990}
 991
 992/*
 993 * configure a sync endpoint
 994 */
 995static int sync_ep_set_params(struct snd_usb_endpoint *ep)
 996{
 997        int i;
 998
 999        ep->syncbuf = usb_alloc_coherent(ep->chip->dev, SYNC_URBS * 4,
1000                                         GFP_KERNEL, &ep->sync_dma);
1001        if (!ep->syncbuf)
1002                return -ENOMEM;
1003
1004        for (i = 0; i < SYNC_URBS; i++) {
1005                struct snd_urb_ctx *u = &ep->urb[i];
1006                u->index = i;
1007                u->ep = ep;
1008                u->packets = 1;
1009                u->urb = usb_alloc_urb(1, GFP_KERNEL);
1010                if (!u->urb)
1011                        goto out_of_memory;
1012                u->urb->transfer_buffer = ep->syncbuf + i * 4;
1013                u->urb->transfer_dma = ep->sync_dma + i * 4;
1014                u->urb->transfer_buffer_length = 4;
1015                u->urb->pipe = ep->pipe;
1016                u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1017                u->urb->number_of_packets = 1;
1018                u->urb->interval = 1 << ep->syncinterval;
1019                u->urb->context = u;
1020                u->urb->complete = snd_complete_urb;
1021        }
1022
1023        ep->nurbs = SYNC_URBS;
1024
1025        return 0;
1026
1027out_of_memory:
1028        release_urbs(ep, 0);
1029        return -ENOMEM;
1030}
1031
1032/**
1033 * snd_usb_endpoint_set_params: configure an snd_usb_endpoint
1034 *
1035 * @ep: the snd_usb_endpoint to configure
1036 * @pcm_format: the audio fomat.
1037 * @channels: the number of audio channels.
1038 * @period_bytes: the number of bytes in one alsa period.
1039 * @period_frames: the number of frames in one alsa period.
1040 * @buffer_periods: the number of periods in one alsa buffer.
1041 * @rate: the frame rate.
1042 * @fmt: the USB audio format information
1043 * @sync_ep: the sync endpoint to use, if any
1044 *
1045 * Determine the number of URBs to be used on this endpoint.
1046 * An endpoint must be configured before it can be started.
1047 * An endpoint that is already running can not be reconfigured.
1048 */
1049int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
1050                                snd_pcm_format_t pcm_format,
1051                                unsigned int channels,
1052                                unsigned int period_bytes,
1053                                unsigned int period_frames,
1054                                unsigned int buffer_periods,
1055                                unsigned int rate,
1056                                struct audioformat *fmt,
1057                                struct snd_usb_endpoint *sync_ep)
1058{
1059        int err;
1060
1061        if (ep->use_count != 0) {
1062                bool check = ep->is_implicit_feedback &&
1063                        check_ep_params(ep, pcm_format,
1064                                             channels, period_bytes,
1065                                             period_frames, buffer_periods,
1066                                             fmt, sync_ep);
1067
1068                if (!check) {
1069                        usb_audio_warn(ep->chip,
1070                                "Unable to change format on ep #%x: already in use\n",
1071                                ep->ep_num);
1072                        return -EBUSY;
1073                }
1074
1075                usb_audio_dbg(ep->chip,
1076                              "Ep #%x already in use as implicit feedback but format not changed\n",
1077                              ep->ep_num);
1078                return 0;
1079        }
1080
1081        /* release old buffers, if any */
1082        release_urbs(ep, 0);
1083
1084        ep->datainterval = fmt->datainterval;
1085        ep->maxpacksize = fmt->maxpacksize;
1086        ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX);
1087
1088        if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) {
1089                ep->freqn = get_usb_full_speed_rate(rate);
1090                ep->pps = 1000 >> ep->datainterval;
1091        } else {
1092                ep->freqn = get_usb_high_speed_rate(rate);
1093                ep->pps = 8000 >> ep->datainterval;
1094        }
1095
1096        ep->sample_rem = rate % ep->pps;
1097        ep->packsize[0] = rate / ep->pps;
1098        ep->packsize[1] = (rate + (ep->pps - 1)) / ep->pps;
1099
1100        /* calculate the frequency in 16.16 format */
1101        ep->freqm = ep->freqn;
1102        ep->freqshift = INT_MIN;
1103
1104        ep->phase = 0;
1105
1106        switch (ep->type) {
1107        case  SND_USB_ENDPOINT_TYPE_DATA:
1108                err = data_ep_set_params(ep, pcm_format, channels,
1109                                         period_bytes, period_frames,
1110                                         buffer_periods, fmt, sync_ep);
1111                break;
1112        case  SND_USB_ENDPOINT_TYPE_SYNC:
1113                err = sync_ep_set_params(ep);
1114                break;
1115        default:
1116                err = -EINVAL;
1117        }
1118
1119        usb_audio_dbg(ep->chip,
1120                "Setting params for ep #%x (type %d, %d urbs), ret=%d\n",
1121                ep->ep_num, ep->type, ep->nurbs, err);
1122
1123        return err;
1124}
1125
1126/**
1127 * snd_usb_endpoint_start: start an snd_usb_endpoint
1128 *
1129 * @ep: the endpoint to start
1130 *
1131 * A call to this function will increment the use count of the endpoint.
1132 * In case it is not already running, the URBs for this endpoint will be
1133 * submitted. Otherwise, this function does nothing.
1134 *
1135 * Must be balanced to calls of snd_usb_endpoint_stop().
1136 *
1137 * Returns an error if the URB submission failed, 0 in all other cases.
1138 */
1139int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
1140{
1141        int err;
1142        unsigned int i;
1143
1144        if (atomic_read(&ep->chip->shutdown))
1145                return -EBADFD;
1146
1147        /* already running? */
1148        if (++ep->use_count != 1)
1149                return 0;
1150
1151        /* just to be sure */
1152        deactivate_urbs(ep, false);
1153
1154        ep->active_mask = 0;
1155        ep->unlink_mask = 0;
1156        ep->phase = 0;
1157        ep->sample_accum = 0;
1158
1159        snd_usb_endpoint_start_quirk(ep);
1160
1161        /*
1162         * If this endpoint has a data endpoint as implicit feedback source,
1163         * don't start the urbs here. Instead, mark them all as available,
1164         * wait for the record urbs to return and queue the playback urbs
1165         * from that context.
1166         */
1167
1168        set_bit(EP_FLAG_RUNNING, &ep->flags);
1169
1170        if (snd_usb_endpoint_implicit_feedback_sink(ep)) {
1171                for (i = 0; i < ep->nurbs; i++) {
1172                        struct snd_urb_ctx *ctx = ep->urb + i;
1173                        list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs);
1174                }
1175
1176                return 0;
1177        }
1178
1179        for (i = 0; i < ep->nurbs; i++) {
1180                struct urb *urb = ep->urb[i].urb;
1181
1182                if (snd_BUG_ON(!urb))
1183                        goto __error;
1184
1185                if (usb_pipeout(ep->pipe)) {
1186                        prepare_outbound_urb(ep, urb->context);
1187                } else {
1188                        prepare_inbound_urb(ep, urb->context);
1189                }
1190
1191                err = usb_submit_urb(urb, GFP_ATOMIC);
1192                if (err < 0) {
1193                        usb_audio_err(ep->chip,
1194                                "cannot submit urb %d, error %d: %s\n",
1195                                i, err, usb_error_string(err));
1196                        goto __error;
1197                }
1198                set_bit(i, &ep->active_mask);
1199        }
1200
1201        return 0;
1202
1203__error:
1204        clear_bit(EP_FLAG_RUNNING, &ep->flags);
1205        ep->use_count--;
1206        deactivate_urbs(ep, false);
1207        return -EPIPE;
1208}
1209
1210/**
1211 * snd_usb_endpoint_stop: stop an snd_usb_endpoint
1212 *
1213 * @ep: the endpoint to stop (may be NULL)
1214 *
1215 * A call to this function will decrement the use count of the endpoint.
1216 * In case the last user has requested the endpoint stop, the URBs will
1217 * actually be deactivated.
1218 *
1219 * Must be balanced to calls of snd_usb_endpoint_start().
1220 *
1221 * The caller needs to synchronize the pending stop operation via
1222 * snd_usb_endpoint_sync_pending_stop().
1223 */
1224void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep)
1225{
1226        if (!ep)
1227                return;
1228
1229        if (snd_BUG_ON(ep->use_count == 0))
1230                return;
1231
1232        if (--ep->use_count == 0) {
1233                deactivate_urbs(ep, false);
1234                set_bit(EP_FLAG_STOPPING, &ep->flags);
1235        }
1236}
1237
1238/**
1239 * snd_usb_endpoint_deactivate: deactivate an snd_usb_endpoint
1240 *
1241 * @ep: the endpoint to deactivate
1242 *
1243 * If the endpoint is not currently in use, this functions will
1244 * deactivate its associated URBs.
1245 *
1246 * In case of any active users, this functions does nothing.
1247 */
1248void snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep)
1249{
1250        if (!ep)
1251                return;
1252
1253        if (ep->use_count != 0)
1254                return;
1255
1256        deactivate_urbs(ep, true);
1257        wait_clear_urbs(ep);
1258}
1259
1260/**
1261 * snd_usb_endpoint_release: Tear down an snd_usb_endpoint
1262 *
1263 * @ep: the endpoint to release
1264 *
1265 * This function does not care for the endpoint's use count but will tear
1266 * down all the streaming URBs immediately.
1267 */
1268void snd_usb_endpoint_release(struct snd_usb_endpoint *ep)
1269{
1270        release_urbs(ep, 1);
1271}
1272
1273/**
1274 * snd_usb_endpoint_free: Free the resources of an snd_usb_endpoint
1275 *
1276 * @ep: the endpoint to free
1277 *
1278 * This free all resources of the given ep.
1279 */
1280void snd_usb_endpoint_free(struct snd_usb_endpoint *ep)
1281{
1282        kfree(ep);
1283}
1284
1285/**
1286 * snd_usb_handle_sync_urb: parse an USB sync packet
1287 *
1288 * @ep: the endpoint to handle the packet
1289 * @sender: the sending endpoint
1290 * @urb: the received packet
1291 *
1292 * This function is called from the context of an endpoint that received
1293 * the packet and is used to let another endpoint object handle the payload.
1294 */
1295void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
1296                             struct snd_usb_endpoint *sender,
1297                             const struct urb *urb)
1298{
1299        int shift;
1300        unsigned int f;
1301        unsigned long flags;
1302
1303        snd_BUG_ON(ep == sender);
1304
1305        /*
1306         * In case the endpoint is operating in implicit feedback mode, prepare
1307         * a new outbound URB that has the same layout as the received packet
1308         * and add it to the list of pending urbs. queue_pending_output_urbs()
1309         * will take care of them later.
1310         */
1311        if (snd_usb_endpoint_implicit_feedback_sink(ep) &&
1312            ep->use_count != 0) {
1313
1314                /* implicit feedback case */
1315                int i, bytes = 0;
1316                struct snd_urb_ctx *in_ctx;
1317                struct snd_usb_packet_info *out_packet;
1318
1319                in_ctx = urb->context;
1320
1321                /* Count overall packet size */
1322                for (i = 0; i < in_ctx->packets; i++)
1323                        if (urb->iso_frame_desc[i].status == 0)
1324                                bytes += urb->iso_frame_desc[i].actual_length;
1325
1326                /*
1327                 * skip empty packets. At least M-Audio's Fast Track Ultra stops
1328                 * streaming once it received a 0-byte OUT URB
1329                 */
1330                if (bytes == 0)
1331                        return;
1332
1333                spin_lock_irqsave(&ep->lock, flags);
1334                out_packet = ep->next_packet + ep->next_packet_write_pos;
1335
1336                /*
1337                 * Iterate through the inbound packet and prepare the lengths
1338                 * for the output packet. The OUT packet we are about to send
1339                 * will have the same amount of payload bytes per stride as the
1340                 * IN packet we just received. Since the actual size is scaled
1341                 * by the stride, use the sender stride to calculate the length
1342                 * in case the number of channels differ between the implicitly
1343                 * fed-back endpoint and the synchronizing endpoint.
1344                 */
1345
1346                out_packet->packets = in_ctx->packets;
1347                for (i = 0; i < in_ctx->packets; i++) {
1348                        if (urb->iso_frame_desc[i].status == 0)
1349                                out_packet->packet_size[i] =
1350                                        urb->iso_frame_desc[i].actual_length / sender->stride;
1351                        else
1352                                out_packet->packet_size[i] = 0;
1353                }
1354
1355                ep->next_packet_write_pos++;
1356                ep->next_packet_write_pos %= MAX_URBS;
1357                spin_unlock_irqrestore(&ep->lock, flags);
1358                queue_pending_output_urbs(ep);
1359
1360                return;
1361        }
1362
1363        /*
1364         * process after playback sync complete
1365         *
1366         * Full speed devices report feedback values in 10.14 format as samples
1367         * per frame, high speed devices in 16.16 format as samples per
1368         * microframe.
1369         *
1370         * Because the Audio Class 1 spec was written before USB 2.0, many high
1371         * speed devices use a wrong interpretation, some others use an
1372         * entirely different format.
1373         *
1374         * Therefore, we cannot predict what format any particular device uses
1375         * and must detect it automatically.
1376         */
1377
1378        if (urb->iso_frame_desc[0].status != 0 ||
1379            urb->iso_frame_desc[0].actual_length < 3)
1380                return;
1381
1382        f = le32_to_cpup(urb->transfer_buffer);
1383        if (urb->iso_frame_desc[0].actual_length == 3)
1384                f &= 0x00ffffff;
1385        else
1386                f &= 0x0fffffff;
1387
1388        if (f == 0)
1389                return;
1390
1391        if (unlikely(sender->tenor_fb_quirk)) {
1392                /*
1393                 * Devices based on Tenor 8802 chipsets (TEAC UD-H01
1394                 * and others) sometimes change the feedback value
1395                 * by +/- 0x1.0000.
1396                 */
1397                if (f < ep->freqn - 0x8000)
1398                        f += 0xf000;
1399                else if (f > ep->freqn + 0x8000)
1400                        f -= 0xf000;
1401        } else if (unlikely(ep->freqshift == INT_MIN)) {
1402                /*
1403                 * The first time we see a feedback value, determine its format
1404                 * by shifting it left or right until it matches the nominal
1405                 * frequency value.  This assumes that the feedback does not
1406                 * differ from the nominal value more than +50% or -25%.
1407                 */
1408                shift = 0;
1409                while (f < ep->freqn - ep->freqn / 4) {
1410                        f <<= 1;
1411                        shift++;
1412                }
1413                while (f > ep->freqn + ep->freqn / 2) {
1414                        f >>= 1;
1415                        shift--;
1416                }
1417                ep->freqshift = shift;
1418        } else if (ep->freqshift >= 0)
1419                f <<= ep->freqshift;
1420        else
1421                f >>= -ep->freqshift;
1422
1423        if (likely(f >= ep->freqn - ep->freqn / 8 && f <= ep->freqmax)) {
1424                /*
1425                 * If the frequency looks valid, set it.
1426                 * This value is referred to in prepare_playback_urb().
1427                 */
1428                spin_lock_irqsave(&ep->lock, flags);
1429                ep->freqm = f;
1430                spin_unlock_irqrestore(&ep->lock, flags);
1431        } else {
1432                /*
1433                 * Out of range; maybe the shift value is wrong.
1434                 * Reset it so that we autodetect again the next time.
1435                 */
1436                ep->freqshift = INT_MIN;
1437        }
1438}
1439
1440