linux/sound/usb/endpoint.c
<<
>>
Prefs
   1/*
   2 *   This program is free software; you can redistribute it and/or modify
   3 *   it under the terms of the GNU General Public License as published by
   4 *   the Free Software Foundation; either version 2 of the License, or
   5 *   (at your option) any later version.
   6 *
   7 *   This program is distributed in the hope that it will be useful,
   8 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   9 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10 *   GNU General Public License for more details.
  11 *
  12 *   You should have received a copy of the GNU General Public License
  13 *   along with this program; if not, write to the Free Software
  14 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  15 *
  16 */
  17
  18#include <linux/gfp.h>
  19#include <linux/init.h>
  20#include <linux/ratelimit.h>
  21#include <linux/usb.h>
  22#include <linux/usb/audio.h>
  23#include <linux/slab.h>
  24
  25#include <sound/core.h>
  26#include <sound/pcm.h>
  27#include <sound/pcm_params.h>
  28
  29#include "usbaudio.h"
  30#include "helper.h"
  31#include "card.h"
  32#include "endpoint.h"
  33#include "pcm.h"
  34
  35#define EP_FLAG_ACTIVATED       0
  36#define EP_FLAG_RUNNING         1
  37
  38/*
  39 * snd_usb_endpoint is a model that abstracts everything related to an
  40 * USB endpoint and its streaming.
  41 *
  42 * There are functions to activate and deactivate the streaming URBs and
  43 * optional callbacks to let the pcm logic handle the actual content of the
  44 * packets for playback and record. Thus, the bus streaming and the audio
  45 * handlers are fully decoupled.
  46 *
  47 * There are two different types of endpoints in audio applications.
  48 *
  49 * SND_USB_ENDPOINT_TYPE_DATA handles full audio data payload for both
  50 * inbound and outbound traffic.
  51 *
  52 * SND_USB_ENDPOINT_TYPE_SYNC endpoints are for inbound traffic only and
  53 * expect the payload to carry Q10.14 / Q16.16 formatted sync information
  54 * (3 or 4 bytes).
  55 *
  56 * Each endpoint has to be configured prior to being used by calling
  57 * snd_usb_endpoint_set_params().
  58 *
  59 * The model incorporates a reference counting, so that multiple users
  60 * can call snd_usb_endpoint_start() and snd_usb_endpoint_stop(), and
  61 * only the first user will effectively start the URBs, and only the last
  62 * one to stop it will tear the URBs down again.
  63 */
  64
  65/*
  66 * convert a sampling rate into our full speed format (fs/1000 in Q16.16)
  67 * this will overflow at approx 524 kHz
  68 */
  69static inline unsigned get_usb_full_speed_rate(unsigned int rate)
  70{
  71        return ((rate << 13) + 62) / 125;
  72}
  73
  74/*
  75 * convert a sampling rate into USB high speed format (fs/8000 in Q16.16)
  76 * this will overflow at approx 4 MHz
  77 */
  78static inline unsigned get_usb_high_speed_rate(unsigned int rate)
  79{
  80        return ((rate << 10) + 62) / 125;
  81}
  82
  83/*
  84 * release a urb data
  85 */
  86static void release_urb_ctx(struct snd_urb_ctx *u)
  87{
  88        if (u->buffer_size)
  89                usb_free_coherent(u->ep->chip->dev, u->buffer_size,
  90                                  u->urb->transfer_buffer,
  91                                  u->urb->transfer_dma);
  92        usb_free_urb(u->urb);
  93        u->urb = NULL;
  94}
  95
  96static const char *usb_error_string(int err)
  97{
  98        switch (err) {
  99        case -ENODEV:
 100                return "no device";
 101        case -ENOENT:
 102                return "endpoint not enabled";
 103        case -EPIPE:
 104                return "endpoint stalled";
 105        case -ENOSPC:
 106                return "not enough bandwidth";
 107        case -ESHUTDOWN:
 108                return "device disabled";
 109        case -EHOSTUNREACH:
 110                return "device suspended";
 111        case -EINVAL:
 112        case -EAGAIN:
 113        case -EFBIG:
 114        case -EMSGSIZE:
 115                return "internal error";
 116        default:
 117                return "unknown error";
 118        }
 119}
 120
 121/**
 122 * snd_usb_endpoint_implicit_feedback_sink: Report endpoint usage type
 123 *
 124 * @ep: The snd_usb_endpoint
 125 *
 126 * Determine whether an endpoint is driven by an implicit feedback
 127 * data endpoint source.
 128 */
 129int snd_usb_endpoint_implict_feedback_sink(struct snd_usb_endpoint *ep)
 130{
 131        return  ep->sync_master &&
 132                ep->sync_master->type == SND_USB_ENDPOINT_TYPE_DATA &&
 133                ep->type == SND_USB_ENDPOINT_TYPE_DATA &&
 134                usb_pipeout(ep->pipe);
 135}
 136
 137/*
 138 * For streaming based on information derived from sync endpoints,
 139 * prepare_outbound_urb_sizes() will call next_packet_size() to
 140 * determine the number of samples to be sent in the next packet.
 141 *
 142 * For implicit feedback, next_packet_size() is unused.
 143 */
 144int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
 145{
 146        unsigned long flags;
 147        int ret;
 148
 149        if (ep->fill_max)
 150                return ep->maxframesize;
 151
 152        spin_lock_irqsave(&ep->lock, flags);
 153        ep->phase = (ep->phase & 0xffff)
 154                + (ep->freqm << ep->datainterval);
 155        ret = min(ep->phase >> 16, ep->maxframesize);
 156        spin_unlock_irqrestore(&ep->lock, flags);
 157
 158        return ret;
 159}
 160
 161static void retire_outbound_urb(struct snd_usb_endpoint *ep,
 162                                struct snd_urb_ctx *urb_ctx)
 163{
 164        if (ep->retire_data_urb)
 165                ep->retire_data_urb(ep->data_subs, urb_ctx->urb);
 166}
 167
 168static void retire_inbound_urb(struct snd_usb_endpoint *ep,
 169                               struct snd_urb_ctx *urb_ctx)
 170{
 171        struct urb *urb = urb_ctx->urb;
 172
 173        if (ep->sync_slave)
 174                snd_usb_handle_sync_urb(ep->sync_slave, ep, urb);
 175
 176        if (ep->retire_data_urb)
 177                ep->retire_data_urb(ep->data_subs, urb);
 178}
 179
 180/*
 181 * Prepare a PLAYBACK urb for submission to the bus.
 182 */
 183static void prepare_outbound_urb(struct snd_usb_endpoint *ep,
 184                                 struct snd_urb_ctx *ctx)
 185{
 186        int i;
 187        struct urb *urb = ctx->urb;
 188        unsigned char *cp = urb->transfer_buffer;
 189
 190        urb->dev = ep->chip->dev; /* we need to set this at each time */
 191
 192        switch (ep->type) {
 193        case SND_USB_ENDPOINT_TYPE_DATA:
 194                if (ep->prepare_data_urb) {
 195                        ep->prepare_data_urb(ep->data_subs, urb);
 196                } else {
 197                        /* no data provider, so send silence */
 198                        unsigned int offs = 0;
 199                        for (i = 0; i < ctx->packets; ++i) {
 200                                int counts;
 201
 202                                if (ctx->packet_size[i])
 203                                        counts = ctx->packet_size[i];
 204                                else
 205                                        counts = snd_usb_endpoint_next_packet_size(ep);
 206
 207                                urb->iso_frame_desc[i].offset = offs * ep->stride;
 208                                urb->iso_frame_desc[i].length = counts * ep->stride;
 209                                offs += counts;
 210                        }
 211
 212                        urb->number_of_packets = ctx->packets;
 213                        urb->transfer_buffer_length = offs * ep->stride;
 214                        memset(urb->transfer_buffer, ep->silence_value,
 215                               offs * ep->stride);
 216                }
 217                break;
 218
 219        case SND_USB_ENDPOINT_TYPE_SYNC:
 220                if (snd_usb_get_speed(ep->chip->dev) >= USB_SPEED_HIGH) {
 221                        /*
 222                         * fill the length and offset of each urb descriptor.
 223                         * the fixed 12.13 frequency is passed as 16.16 through the pipe.
 224                         */
 225                        urb->iso_frame_desc[0].length = 4;
 226                        urb->iso_frame_desc[0].offset = 0;
 227                        cp[0] = ep->freqn;
 228                        cp[1] = ep->freqn >> 8;
 229                        cp[2] = ep->freqn >> 16;
 230                        cp[3] = ep->freqn >> 24;
 231                } else {
 232                        /*
 233                         * fill the length and offset of each urb descriptor.
 234                         * the fixed 10.14 frequency is passed through the pipe.
 235                         */
 236                        urb->iso_frame_desc[0].length = 3;
 237                        urb->iso_frame_desc[0].offset = 0;
 238                        cp[0] = ep->freqn >> 2;
 239                        cp[1] = ep->freqn >> 10;
 240                        cp[2] = ep->freqn >> 18;
 241                }
 242
 243                break;
 244        }
 245}
 246
 247/*
 248 * Prepare a CAPTURE or SYNC urb for submission to the bus.
 249 */
 250static inline void prepare_inbound_urb(struct snd_usb_endpoint *ep,
 251                                       struct snd_urb_ctx *urb_ctx)
 252{
 253        int i, offs;
 254        struct urb *urb = urb_ctx->urb;
 255
 256        urb->dev = ep->chip->dev; /* we need to set this at each time */
 257
 258        switch (ep->type) {
 259        case SND_USB_ENDPOINT_TYPE_DATA:
 260                offs = 0;
 261                for (i = 0; i < urb_ctx->packets; i++) {
 262                        urb->iso_frame_desc[i].offset = offs;
 263                        urb->iso_frame_desc[i].length = ep->curpacksize;
 264                        offs += ep->curpacksize;
 265                }
 266
 267                urb->transfer_buffer_length = offs;
 268                urb->number_of_packets = urb_ctx->packets;
 269                break;
 270
 271        case SND_USB_ENDPOINT_TYPE_SYNC:
 272                urb->iso_frame_desc[0].length = min(4u, ep->syncmaxsize);
 273                urb->iso_frame_desc[0].offset = 0;
 274                break;
 275        }
 276}
 277
 278/*
 279 * Send output urbs that have been prepared previously. URBs are dequeued
 280 * from ep->ready_playback_urbs and in case there there aren't any available
 281 * or there are no packets that have been prepared, this function does
 282 * nothing.
 283 *
 284 * The reason why the functionality of sending and preparing URBs is separated
 285 * is that host controllers don't guarantee the order in which they return
 286 * inbound and outbound packets to their submitters.
 287 *
 288 * This function is only used for implicit feedback endpoints. For endpoints
 289 * driven by dedicated sync endpoints, URBs are immediately re-submitted
 290 * from their completion handler.
 291 */
 292static void queue_pending_output_urbs(struct snd_usb_endpoint *ep)
 293{
 294        while (test_bit(EP_FLAG_RUNNING, &ep->flags)) {
 295
 296                unsigned long flags;
 297                struct snd_usb_packet_info *uninitialized_var(packet);
 298                struct snd_urb_ctx *ctx = NULL;
 299                struct urb *urb;
 300                int err, i;
 301
 302                spin_lock_irqsave(&ep->lock, flags);
 303                if (ep->next_packet_read_pos != ep->next_packet_write_pos) {
 304                        packet = ep->next_packet + ep->next_packet_read_pos;
 305                        ep->next_packet_read_pos++;
 306                        ep->next_packet_read_pos %= MAX_URBS;
 307
 308                        /* take URB out of FIFO */
 309                        if (!list_empty(&ep->ready_playback_urbs))
 310                                ctx = list_first_entry(&ep->ready_playback_urbs,
 311                                               struct snd_urb_ctx, ready_list);
 312                }
 313                spin_unlock_irqrestore(&ep->lock, flags);
 314
 315                if (ctx == NULL)
 316                        return;
 317
 318                list_del_init(&ctx->ready_list);
 319                urb = ctx->urb;
 320
 321                /* copy over the length information */
 322                for (i = 0; i < packet->packets; i++)
 323                        ctx->packet_size[i] = packet->packet_size[i];
 324
 325                /* call the data handler to fill in playback data */
 326                prepare_outbound_urb(ep, ctx);
 327
 328                err = usb_submit_urb(ctx->urb, GFP_ATOMIC);
 329                if (err < 0)
 330                        snd_printk(KERN_ERR "Unable to submit urb #%d: %d (urb %p)\n",
 331                                   ctx->index, err, ctx->urb);
 332                else
 333                        set_bit(ctx->index, &ep->active_mask);
 334        }
 335}
 336
 337/*
 338 * complete callback for urbs
 339 */
 340static void snd_complete_urb(struct urb *urb)
 341{
 342        struct snd_urb_ctx *ctx = urb->context;
 343        struct snd_usb_endpoint *ep = ctx->ep;
 344        int err;
 345
 346        if (unlikely(urb->status == -ENOENT ||          /* unlinked */
 347                     urb->status == -ENODEV ||          /* device removed */
 348                     urb->status == -ECONNRESET ||      /* unlinked */
 349                     urb->status == -ESHUTDOWN ||       /* device disabled */
 350                     ep->chip->shutdown))               /* device disconnected */
 351                goto exit_clear;
 352
 353        if (usb_pipeout(ep->pipe)) {
 354                retire_outbound_urb(ep, ctx);
 355                /* can be stopped during retire callback */
 356                if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
 357                        goto exit_clear;
 358
 359                if (snd_usb_endpoint_implict_feedback_sink(ep)) {
 360                        unsigned long flags;
 361
 362                        spin_lock_irqsave(&ep->lock, flags);
 363                        list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs);
 364                        spin_unlock_irqrestore(&ep->lock, flags);
 365                        queue_pending_output_urbs(ep);
 366
 367                        goto exit_clear;
 368                }
 369
 370                prepare_outbound_urb(ep, ctx);
 371        } else {
 372                retire_inbound_urb(ep, ctx);
 373                /* can be stopped during retire callback */
 374                if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
 375                        goto exit_clear;
 376
 377                prepare_inbound_urb(ep, ctx);
 378        }
 379
 380        err = usb_submit_urb(urb, GFP_ATOMIC);
 381        if (err == 0)
 382                return;
 383
 384        snd_printk(KERN_ERR "cannot submit urb (err = %d)\n", err);
 385        //snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
 386
 387exit_clear:
 388        clear_bit(ctx->index, &ep->active_mask);
 389}
 390
 391/**
 392 * snd_usb_add_endpoint: Add an endpoint to an USB audio chip
 393 *
 394 * @chip: The chip
 395 * @alts: The USB host interface
 396 * @ep_num: The number of the endpoint to use
 397 * @direction: SNDRV_PCM_STREAM_PLAYBACK or SNDRV_PCM_STREAM_CAPTURE
 398 * @type: SND_USB_ENDPOINT_TYPE_DATA or SND_USB_ENDPOINT_TYPE_SYNC
 399 *
 400 * If the requested endpoint has not been added to the given chip before,
 401 * a new instance is created. Otherwise, a pointer to the previoulsy
 402 * created instance is returned. In case of any error, NULL is returned.
 403 *
 404 * New endpoints will be added to chip->ep_list and must be freed by
 405 * calling snd_usb_endpoint_free().
 406 */
 407struct snd_usb_endpoint *snd_usb_add_endpoint(struct snd_usb_audio *chip,
 408                                              struct usb_host_interface *alts,
 409                                              int ep_num, int direction, int type)
 410{
 411        struct list_head *p;
 412        struct snd_usb_endpoint *ep;
 413        int is_playback = direction == SNDRV_PCM_STREAM_PLAYBACK;
 414
 415        mutex_lock(&chip->mutex);
 416
 417        list_for_each(p, &chip->ep_list) {
 418                ep = list_entry(p, struct snd_usb_endpoint, list);
 419                if (ep->ep_num == ep_num &&
 420                    ep->iface == alts->desc.bInterfaceNumber &&
 421                    ep->alt_idx == alts->desc.bAlternateSetting) {
 422                        snd_printdd(KERN_DEBUG "Re-using EP %x in iface %d,%d @%p\n",
 423                                        ep_num, ep->iface, ep->alt_idx, ep);
 424                        goto __exit_unlock;
 425                }
 426        }
 427
 428        snd_printdd(KERN_DEBUG "Creating new %s %s endpoint #%x\n",
 429                    is_playback ? "playback" : "capture",
 430                    type == SND_USB_ENDPOINT_TYPE_DATA ? "data" : "sync",
 431                    ep_num);
 432
 433        ep = kzalloc(sizeof(*ep), GFP_KERNEL);
 434        if (!ep)
 435                goto __exit_unlock;
 436
 437        ep->chip = chip;
 438        spin_lock_init(&ep->lock);
 439        ep->type = type;
 440        ep->ep_num = ep_num;
 441        ep->iface = alts->desc.bInterfaceNumber;
 442        ep->alt_idx = alts->desc.bAlternateSetting;
 443        INIT_LIST_HEAD(&ep->ready_playback_urbs);
 444        ep_num &= USB_ENDPOINT_NUMBER_MASK;
 445
 446        if (is_playback)
 447                ep->pipe = usb_sndisocpipe(chip->dev, ep_num);
 448        else
 449                ep->pipe = usb_rcvisocpipe(chip->dev, ep_num);
 450
 451        if (type == SND_USB_ENDPOINT_TYPE_SYNC) {
 452                if (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
 453                    get_endpoint(alts, 1)->bRefresh >= 1 &&
 454                    get_endpoint(alts, 1)->bRefresh <= 9)
 455                        ep->syncinterval = get_endpoint(alts, 1)->bRefresh;
 456                else if (snd_usb_get_speed(chip->dev) == USB_SPEED_FULL)
 457                        ep->syncinterval = 1;
 458                else if (get_endpoint(alts, 1)->bInterval >= 1 &&
 459                         get_endpoint(alts, 1)->bInterval <= 16)
 460                        ep->syncinterval = get_endpoint(alts, 1)->bInterval - 1;
 461                else
 462                        ep->syncinterval = 3;
 463
 464                ep->syncmaxsize = le16_to_cpu(get_endpoint(alts, 1)->wMaxPacketSize);
 465        }
 466
 467        list_add_tail(&ep->list, &chip->ep_list);
 468
 469__exit_unlock:
 470        mutex_unlock(&chip->mutex);
 471
 472        return ep;
 473}
 474
 475/*
 476 *  wait until all urbs are processed.
 477 */
 478static int wait_clear_urbs(struct snd_usb_endpoint *ep)
 479{
 480        unsigned long end_time = jiffies + msecs_to_jiffies(1000);
 481        unsigned int i;
 482        int alive;
 483
 484        do {
 485                alive = 0;
 486                for (i = 0; i < ep->nurbs; i++)
 487                        if (test_bit(i, &ep->active_mask))
 488                                alive++;
 489
 490                if (!alive)
 491                        break;
 492
 493                schedule_timeout_uninterruptible(1);
 494        } while (time_before(jiffies, end_time));
 495
 496        if (alive)
 497                snd_printk(KERN_ERR "timeout: still %d active urbs on EP #%x\n",
 498                                        alive, ep->ep_num);
 499
 500        return 0;
 501}
 502
 503/*
 504 * unlink active urbs.
 505 */
 506static int deactivate_urbs(struct snd_usb_endpoint *ep, int force, int can_sleep)
 507{
 508        unsigned int i;
 509        int async;
 510
 511        if (!force && ep->chip->shutdown) /* to be sure... */
 512                return -EBADFD;
 513
 514        async = !can_sleep && ep->chip->async_unlink;
 515
 516        clear_bit(EP_FLAG_RUNNING, &ep->flags);
 517
 518        INIT_LIST_HEAD(&ep->ready_playback_urbs);
 519        ep->next_packet_read_pos = 0;
 520        ep->next_packet_write_pos = 0;
 521
 522        if (!async && in_interrupt())
 523                return 0;
 524
 525        for (i = 0; i < ep->nurbs; i++) {
 526                if (test_bit(i, &ep->active_mask)) {
 527                        if (!test_and_set_bit(i, &ep->unlink_mask)) {
 528                                struct urb *u = ep->urb[i].urb;
 529                                if (async)
 530                                        usb_unlink_urb(u);
 531                                else
 532                                        usb_kill_urb(u);
 533                        }
 534                }
 535        }
 536
 537        return 0;
 538}
 539
 540/*
 541 * release an endpoint's urbs
 542 */
 543static void release_urbs(struct snd_usb_endpoint *ep, int force)
 544{
 545        int i;
 546
 547        /* route incoming urbs to nirvana */
 548        ep->retire_data_urb = NULL;
 549        ep->prepare_data_urb = NULL;
 550
 551        /* stop urbs */
 552        deactivate_urbs(ep, force, 1);
 553        wait_clear_urbs(ep);
 554
 555        for (i = 0; i < ep->nurbs; i++)
 556                release_urb_ctx(&ep->urb[i]);
 557
 558        if (ep->syncbuf)
 559                usb_free_coherent(ep->chip->dev, SYNC_URBS * 4,
 560                                  ep->syncbuf, ep->sync_dma);
 561
 562        ep->syncbuf = NULL;
 563        ep->nurbs = 0;
 564}
 565
 566/*
 567 * configure a data endpoint
 568 */
 569static int data_ep_set_params(struct snd_usb_endpoint *ep,
 570                              struct snd_pcm_hw_params *hw_params,
 571                              struct audioformat *fmt,
 572                              struct snd_usb_endpoint *sync_ep)
 573{
 574        unsigned int maxsize, i, urb_packs, total_packs, packs_per_ms;
 575        int period_bytes = params_period_bytes(hw_params);
 576        int format = params_format(hw_params);
 577        int is_playback = usb_pipeout(ep->pipe);
 578        int frame_bits = snd_pcm_format_physical_width(params_format(hw_params)) *
 579                                                        params_channels(hw_params);
 580
 581        ep->datainterval = fmt->datainterval;
 582        ep->stride = frame_bits >> 3;
 583        ep->silence_value = format == SNDRV_PCM_FORMAT_U8 ? 0x80 : 0;
 584
 585        /* calculate max. frequency */
 586        if (ep->maxpacksize) {
 587                /* whatever fits into a max. size packet */
 588                maxsize = ep->maxpacksize;
 589                ep->freqmax = (maxsize / (frame_bits >> 3))
 590                                << (16 - ep->datainterval);
 591        } else {
 592                /* no max. packet size: just take 25% higher than nominal */
 593                ep->freqmax = ep->freqn + (ep->freqn >> 2);
 594                maxsize = ((ep->freqmax + 0xffff) * (frame_bits >> 3))
 595                                >> (16 - ep->datainterval);
 596        }
 597
 598        if (ep->fill_max)
 599                ep->curpacksize = ep->maxpacksize;
 600        else
 601                ep->curpacksize = maxsize;
 602
 603        if (snd_usb_get_speed(ep->chip->dev) != USB_SPEED_FULL)
 604                packs_per_ms = 8 >> ep->datainterval;
 605        else
 606                packs_per_ms = 1;
 607
 608        if (is_playback && !snd_usb_endpoint_implict_feedback_sink(ep)) {
 609                urb_packs = max(ep->chip->nrpacks, 1);
 610                urb_packs = min(urb_packs, (unsigned int) MAX_PACKS);
 611        } else {
 612                urb_packs = 1;
 613        }
 614
 615        urb_packs *= packs_per_ms;
 616
 617        if (sync_ep && !snd_usb_endpoint_implict_feedback_sink(ep))
 618                urb_packs = min(urb_packs, 1U << sync_ep->syncinterval);
 619
 620        /* decide how many packets to be used */
 621        if (is_playback && !snd_usb_endpoint_implict_feedback_sink(ep)) {
 622                unsigned int minsize, maxpacks;
 623                /* determine how small a packet can be */
 624                minsize = (ep->freqn >> (16 - ep->datainterval))
 625                          * (frame_bits >> 3);
 626                /* with sync from device, assume it can be 12% lower */
 627                if (sync_ep)
 628                        minsize -= minsize >> 3;
 629                minsize = max(minsize, 1u);
 630                total_packs = (period_bytes + minsize - 1) / minsize;
 631                /* we need at least two URBs for queueing */
 632                if (total_packs < 2) {
 633                        total_packs = 2;
 634                } else {
 635                        /* and we don't want too long a queue either */
 636                        maxpacks = max(MAX_QUEUE * packs_per_ms, urb_packs * 2);
 637                        total_packs = min(total_packs, maxpacks);
 638                }
 639        } else {
 640                while (urb_packs > 1 && urb_packs * maxsize >= period_bytes)
 641                        urb_packs >>= 1;
 642                total_packs = MAX_URBS * urb_packs;
 643        }
 644
 645        ep->nurbs = (total_packs + urb_packs - 1) / urb_packs;
 646        if (ep->nurbs > MAX_URBS) {
 647                /* too much... */
 648                ep->nurbs = MAX_URBS;
 649                total_packs = MAX_URBS * urb_packs;
 650        } else if (ep->nurbs < 2) {
 651                /* too little - we need at least two packets
 652                 * to ensure contiguous playback/capture
 653                 */
 654                ep->nurbs = 2;
 655        }
 656
 657        /* allocate and initialize data urbs */
 658        for (i = 0; i < ep->nurbs; i++) {
 659                struct snd_urb_ctx *u = &ep->urb[i];
 660                u->index = i;
 661                u->ep = ep;
 662                u->packets = (i + 1) * total_packs / ep->nurbs
 663                        - i * total_packs / ep->nurbs;
 664                u->buffer_size = maxsize * u->packets;
 665
 666                if (fmt->fmt_type == UAC_FORMAT_TYPE_II)
 667                        u->packets++; /* for transfer delimiter */
 668                u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
 669                if (!u->urb)
 670                        goto out_of_memory;
 671
 672                u->urb->transfer_buffer =
 673                        usb_alloc_coherent(ep->chip->dev, u->buffer_size,
 674                                           GFP_KERNEL, &u->urb->transfer_dma);
 675                if (!u->urb->transfer_buffer)
 676                        goto out_of_memory;
 677                u->urb->pipe = ep->pipe;
 678                u->urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
 679                u->urb->interval = 1 << ep->datainterval;
 680                u->urb->context = u;
 681                u->urb->complete = snd_complete_urb;
 682                INIT_LIST_HEAD(&u->ready_list);
 683        }
 684
 685        return 0;
 686
 687out_of_memory:
 688        release_urbs(ep, 0);
 689        return -ENOMEM;
 690}
 691
 692/*
 693 * configure a sync endpoint
 694 */
 695static int sync_ep_set_params(struct snd_usb_endpoint *ep,
 696                              struct snd_pcm_hw_params *hw_params,
 697                              struct audioformat *fmt)
 698{
 699        int i;
 700
 701        ep->syncbuf = usb_alloc_coherent(ep->chip->dev, SYNC_URBS * 4,
 702                                         GFP_KERNEL, &ep->sync_dma);
 703        if (!ep->syncbuf)
 704                return -ENOMEM;
 705
 706        for (i = 0; i < SYNC_URBS; i++) {
 707                struct snd_urb_ctx *u = &ep->urb[i];
 708                u->index = i;
 709                u->ep = ep;
 710                u->packets = 1;
 711                u->urb = usb_alloc_urb(1, GFP_KERNEL);
 712                if (!u->urb)
 713                        goto out_of_memory;
 714                u->urb->transfer_buffer = ep->syncbuf + i * 4;
 715                u->urb->transfer_dma = ep->sync_dma + i * 4;
 716                u->urb->transfer_buffer_length = 4;
 717                u->urb->pipe = ep->pipe;
 718                u->urb->transfer_flags = URB_ISO_ASAP |
 719                                         URB_NO_TRANSFER_DMA_MAP;
 720                u->urb->number_of_packets = 1;
 721                u->urb->interval = 1 << ep->syncinterval;
 722                u->urb->context = u;
 723                u->urb->complete = snd_complete_urb;
 724        }
 725
 726        ep->nurbs = SYNC_URBS;
 727
 728        return 0;
 729
 730out_of_memory:
 731        release_urbs(ep, 0);
 732        return -ENOMEM;
 733}
 734
 735/**
 736 * snd_usb_endpoint_set_params: configure an snd_usb_endpoint
 737 *
 738 * @ep: the snd_usb_endpoint to configure
 739 * @hw_params: the hardware parameters
 740 * @fmt: the USB audio format information
 741 * @sync_ep: the sync endpoint to use, if any
 742 *
 743 * Determine the number of URBs to be used on this endpoint.
 744 * An endpoint must be configured before it can be started.
 745 * An endpoint that is already running can not be reconfigured.
 746 */
 747int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
 748                                struct snd_pcm_hw_params *hw_params,
 749                                struct audioformat *fmt,
 750                                struct snd_usb_endpoint *sync_ep)
 751{
 752        int err;
 753
 754        if (ep->use_count != 0) {
 755                snd_printk(KERN_WARNING "Unable to change format on ep #%x: already in use\n",
 756                           ep->ep_num);
 757                return -EBUSY;
 758        }
 759
 760        /* release old buffers, if any */
 761        release_urbs(ep, 0);
 762
 763        ep->datainterval = fmt->datainterval;
 764        ep->maxpacksize = fmt->maxpacksize;
 765        ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX);
 766
 767        if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL)
 768                ep->freqn = get_usb_full_speed_rate(params_rate(hw_params));
 769        else
 770                ep->freqn = get_usb_high_speed_rate(params_rate(hw_params));
 771
 772        /* calculate the frequency in 16.16 format */
 773        ep->freqm = ep->freqn;
 774        ep->freqshift = INT_MIN;
 775
 776        ep->phase = 0;
 777
 778        switch (ep->type) {
 779        case  SND_USB_ENDPOINT_TYPE_DATA:
 780                err = data_ep_set_params(ep, hw_params, fmt, sync_ep);
 781                break;
 782        case  SND_USB_ENDPOINT_TYPE_SYNC:
 783                err = sync_ep_set_params(ep, hw_params, fmt);
 784                break;
 785        default:
 786                err = -EINVAL;
 787        }
 788
 789        snd_printdd(KERN_DEBUG "Setting params for ep #%x (type %d, %d urbs), ret=%d\n",
 790                   ep->ep_num, ep->type, ep->nurbs, err);
 791
 792        return err;
 793}
 794
 795/**
 796 * snd_usb_endpoint_start: start an snd_usb_endpoint
 797 *
 798 * @ep:         the endpoint to start
 799 * @can_sleep:  flag indicating whether the operation is executed in
 800 *              non-atomic context
 801 *
 802 * A call to this function will increment the use count of the endpoint.
 803 * In case it is not already running, the URBs for this endpoint will be
 804 * submitted. Otherwise, this function does nothing.
 805 *
 806 * Must be balanced to calls of snd_usb_endpoint_stop().
 807 *
 808 * Returns an error if the URB submission failed, 0 in all other cases.
 809 */
 810int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep)
 811{
 812        int err;
 813        unsigned int i;
 814
 815        if (ep->chip->shutdown)
 816                return -EBADFD;
 817
 818        /* already running? */
 819        if (++ep->use_count != 1)
 820                return 0;
 821
 822        /* just to be sure */
 823        deactivate_urbs(ep, 0, can_sleep);
 824        if (can_sleep)
 825                wait_clear_urbs(ep);
 826
 827        ep->active_mask = 0;
 828        ep->unlink_mask = 0;
 829        ep->phase = 0;
 830
 831        /*
 832         * If this endpoint has a data endpoint as implicit feedback source,
 833         * don't start the urbs here. Instead, mark them all as available,
 834         * wait for the record urbs to return and queue the playback urbs
 835         * from that context.
 836         */
 837
 838        set_bit(EP_FLAG_RUNNING, &ep->flags);
 839
 840        if (snd_usb_endpoint_implict_feedback_sink(ep)) {
 841                for (i = 0; i < ep->nurbs; i++) {
 842                        struct snd_urb_ctx *ctx = ep->urb + i;
 843                        list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs);
 844                }
 845
 846                return 0;
 847        }
 848
 849        for (i = 0; i < ep->nurbs; i++) {
 850                struct urb *urb = ep->urb[i].urb;
 851
 852                if (snd_BUG_ON(!urb))
 853                        goto __error;
 854
 855                if (usb_pipeout(ep->pipe)) {
 856                        prepare_outbound_urb(ep, urb->context);
 857                } else {
 858                        prepare_inbound_urb(ep, urb->context);
 859                }
 860
 861                err = usb_submit_urb(urb, GFP_ATOMIC);
 862                if (err < 0) {
 863                        snd_printk(KERN_ERR "cannot submit urb %d, error %d: %s\n",
 864                                   i, err, usb_error_string(err));
 865                        goto __error;
 866                }
 867                set_bit(i, &ep->active_mask);
 868        }
 869
 870        return 0;
 871
 872__error:
 873        clear_bit(EP_FLAG_RUNNING, &ep->flags);
 874        ep->use_count--;
 875        deactivate_urbs(ep, 0, 0);
 876        return -EPIPE;
 877}
 878
 879/**
 880 * snd_usb_endpoint_stop: stop an snd_usb_endpoint
 881 *
 882 * @ep: the endpoint to stop (may be NULL)
 883 *
 884 * A call to this function will decrement the use count of the endpoint.
 885 * In case the last user has requested the endpoint stop, the URBs will
 886 * actually be deactivated.
 887 *
 888 * Must be balanced to calls of snd_usb_endpoint_start().
 889 */
 890void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep,
 891                           int force, int can_sleep, int wait)
 892{
 893        if (!ep)
 894                return;
 895
 896        if (snd_BUG_ON(ep->use_count == 0))
 897                return;
 898
 899        if (--ep->use_count == 0) {
 900                deactivate_urbs(ep, force, can_sleep);
 901                ep->data_subs = NULL;
 902                ep->sync_slave = NULL;
 903                ep->retire_data_urb = NULL;
 904                ep->prepare_data_urb = NULL;
 905
 906                if (wait)
 907                        wait_clear_urbs(ep);
 908        }
 909}
 910
 911/**
 912 * snd_usb_endpoint_deactivate: deactivate an snd_usb_endpoint
 913 *
 914 * @ep: the endpoint to deactivate
 915 *
 916 * If the endpoint is not currently in use, this functions will select the
 917 * alternate interface setting 0 for the interface of this endpoint.
 918 *
 919 * In case of any active users, this functions does nothing.
 920 *
 921 * Returns an error if usb_set_interface() failed, 0 in all other
 922 * cases.
 923 */
 924int snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep)
 925{
 926        if (!ep)
 927                return -EINVAL;
 928
 929        deactivate_urbs(ep, 1, 1);
 930        wait_clear_urbs(ep);
 931
 932        if (ep->use_count != 0)
 933                return 0;
 934
 935        clear_bit(EP_FLAG_ACTIVATED, &ep->flags);
 936
 937        return 0;
 938}
 939
 940/**
 941 * snd_usb_endpoint_free: Free the resources of an snd_usb_endpoint
 942 *
 943 * @ep: the list header of the endpoint to free
 944 *
 945 * This function does not care for the endpoint's use count but will tear
 946 * down all the streaming URBs immediately and free all resources.
 947 */
 948void snd_usb_endpoint_free(struct list_head *head)
 949{
 950        struct snd_usb_endpoint *ep;
 951
 952        ep = list_entry(head, struct snd_usb_endpoint, list);
 953        release_urbs(ep, 1);
 954        kfree(ep);
 955}
 956
 957/**
 958 * snd_usb_handle_sync_urb: parse an USB sync packet
 959 *
 960 * @ep: the endpoint to handle the packet
 961 * @sender: the sending endpoint
 962 * @urb: the received packet
 963 *
 964 * This function is called from the context of an endpoint that received
 965 * the packet and is used to let another endpoint object handle the payload.
 966 */
 967void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
 968                             struct snd_usb_endpoint *sender,
 969                             const struct urb *urb)
 970{
 971        int shift;
 972        unsigned int f;
 973        unsigned long flags;
 974
 975        snd_BUG_ON(ep == sender);
 976
 977        /*
 978         * In case the endpoint is operating in implicit feedback mode, prepare
 979         * a new outbound URB that has the same layout as the received packet
 980         * and add it to the list of pending urbs. queue_pending_output_urbs()
 981         * will take care of them later.
 982         */
 983        if (snd_usb_endpoint_implict_feedback_sink(ep) &&
 984            ep->use_count != 0) {
 985
 986                /* implicit feedback case */
 987                int i, bytes = 0;
 988                struct snd_urb_ctx *in_ctx;
 989                struct snd_usb_packet_info *out_packet;
 990
 991                in_ctx = urb->context;
 992
 993                /* Count overall packet size */
 994                for (i = 0; i < in_ctx->packets; i++)
 995                        if (urb->iso_frame_desc[i].status == 0)
 996                                bytes += urb->iso_frame_desc[i].actual_length;
 997
 998                /*
 999                 * skip empty packets. At least M-Audio's Fast Track Ultra stops
1000                 * streaming once it received a 0-byte OUT URB
1001                 */
1002                if (bytes == 0)
1003                        return;
1004
1005                spin_lock_irqsave(&ep->lock, flags);
1006                out_packet = ep->next_packet + ep->next_packet_write_pos;
1007
1008                /*
1009                 * Iterate through the inbound packet and prepare the lengths
1010                 * for the output packet. The OUT packet we are about to send
1011                 * will have the same amount of payload bytes than the IN
1012                 * packet we just received.
1013                 */
1014
1015                out_packet->packets = in_ctx->packets;
1016                for (i = 0; i < in_ctx->packets; i++) {
1017                        if (urb->iso_frame_desc[i].status == 0)
1018                                out_packet->packet_size[i] =
1019                                        urb->iso_frame_desc[i].actual_length / ep->stride;
1020                        else
1021                                out_packet->packet_size[i] = 0;
1022                }
1023
1024                ep->next_packet_write_pos++;
1025                ep->next_packet_write_pos %= MAX_URBS;
1026                spin_unlock_irqrestore(&ep->lock, flags);
1027                queue_pending_output_urbs(ep);
1028
1029                return;
1030        }
1031
1032        /*
1033         * process after playback sync complete
1034         *
1035         * Full speed devices report feedback values in 10.14 format as samples
1036         * per frame, high speed devices in 16.16 format as samples per
1037         * microframe.
1038         *
1039         * Because the Audio Class 1 spec was written before USB 2.0, many high
1040         * speed devices use a wrong interpretation, some others use an
1041         * entirely different format.
1042         *
1043         * Therefore, we cannot predict what format any particular device uses
1044         * and must detect it automatically.
1045         */
1046
1047        if (urb->iso_frame_desc[0].status != 0 ||
1048            urb->iso_frame_desc[0].actual_length < 3)
1049                return;
1050
1051        f = le32_to_cpup(urb->transfer_buffer);
1052        if (urb->iso_frame_desc[0].actual_length == 3)
1053                f &= 0x00ffffff;
1054        else
1055                f &= 0x0fffffff;
1056
1057        if (f == 0)
1058                return;
1059
1060        if (unlikely(ep->freqshift == INT_MIN)) {
1061                /*
1062                 * The first time we see a feedback value, determine its format
1063                 * by shifting it left or right until it matches the nominal
1064                 * frequency value.  This assumes that the feedback does not
1065                 * differ from the nominal value more than +50% or -25%.
1066                 */
1067                shift = 0;
1068                while (f < ep->freqn - ep->freqn / 4) {
1069                        f <<= 1;
1070                        shift++;
1071                }
1072                while (f > ep->freqn + ep->freqn / 2) {
1073                        f >>= 1;
1074                        shift--;
1075                }
1076                ep->freqshift = shift;
1077        } else if (ep->freqshift >= 0)
1078                f <<= ep->freqshift;
1079        else
1080                f >>= -ep->freqshift;
1081
1082        if (likely(f >= ep->freqn - ep->freqn / 8 && f <= ep->freqmax)) {
1083                /*
1084                 * If the frequency looks valid, set it.
1085                 * This value is referred to in prepare_playback_urb().
1086                 */
1087                spin_lock_irqsave(&ep->lock, flags);
1088                ep->freqm = f;
1089                spin_unlock_irqrestore(&ep->lock, flags);
1090        } else {
1091                /*
1092                 * Out of range; maybe the shift value is wrong.
1093                 * Reset it so that we autodetect again the next time.
1094                 */
1095                ep->freqshift = INT_MIN;
1096        }
1097}
1098
1099
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.