linux/sound/usb/urb.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/usb.h>
  21#include <linux/usb/audio.h>
  22
  23#include <sound/core.h>
  24#include <sound/pcm.h>
  25
  26#include "usbaudio.h"
  27#include "helper.h"
  28#include "card.h"
  29#include "urb.h"
  30#include "pcm.h"
  31
  32/*
  33 * convert a sampling rate into our full speed format (fs/1000 in Q16.16)
  34 * this will overflow at approx 524 kHz
  35 */
  36static inline unsigned get_usb_full_speed_rate(unsigned int rate)
  37{
  38        return ((rate << 13) + 62) / 125;
  39}
  40
  41/*
  42 * convert a sampling rate into USB high speed format (fs/8000 in Q16.16)
  43 * this will overflow at approx 4 MHz
  44 */
  45static inline unsigned get_usb_high_speed_rate(unsigned int rate)
  46{
  47        return ((rate << 10) + 62) / 125;
  48}
  49
  50/*
  51 * unlink active urbs.
  52 */
  53static int deactivate_urbs(struct snd_usb_substream *subs, int force, int can_sleep)
  54{
  55        struct snd_usb_audio *chip = subs->stream->chip;
  56        unsigned int i;
  57        int async;
  58
  59        subs->running = 0;
  60
  61        if (!force && subs->stream->chip->shutdown) /* to be sure... */
  62                return -EBADFD;
  63
  64        async = !can_sleep && chip->async_unlink;
  65
  66        if (!async && in_interrupt())
  67                return 0;
  68
  69        for (i = 0; i < subs->nurbs; i++) {
  70                if (test_bit(i, &subs->active_mask)) {
  71                        if (!test_and_set_bit(i, &subs->unlink_mask)) {
  72                                struct urb *u = subs->dataurb[i].urb;
  73                                if (async)
  74                                        usb_unlink_urb(u);
  75                                else
  76                                        usb_kill_urb(u);
  77                        }
  78                }
  79        }
  80        if (subs->syncpipe) {
  81                for (i = 0; i < SYNC_URBS; i++) {
  82                        if (test_bit(i+16, &subs->active_mask)) {
  83                                if (!test_and_set_bit(i+16, &subs->unlink_mask)) {
  84                                        struct urb *u = subs->syncurb[i].urb;
  85                                        if (async)
  86                                                usb_unlink_urb(u);
  87                                        else
  88                                                usb_kill_urb(u);
  89                                }
  90                        }
  91                }
  92        }
  93        return 0;
  94}
  95
  96
  97/*
  98 * release a urb data
  99 */
 100static void release_urb_ctx(struct snd_urb_ctx *u)
 101{
 102        if (u->urb) {
 103                if (u->buffer_size)
 104                        usb_free_coherent(u->subs->dev, u->buffer_size,
 105                                        u->urb->transfer_buffer,
 106                                        u->urb->transfer_dma);
 107                usb_free_urb(u->urb);
 108                u->urb = NULL;
 109        }
 110}
 111
 112/*
 113 *  wait until all urbs are processed.
 114 */
 115static int wait_clear_urbs(struct snd_usb_substream *subs)
 116{
 117        unsigned long end_time = jiffies + msecs_to_jiffies(1000);
 118        unsigned int i;
 119        int alive;
 120
 121        do {
 122                alive = 0;
 123                for (i = 0; i < subs->nurbs; i++) {
 124                        if (test_bit(i, &subs->active_mask))
 125                                alive++;
 126                }
 127                if (subs->syncpipe) {
 128                        for (i = 0; i < SYNC_URBS; i++) {
 129                                if (test_bit(i + 16, &subs->active_mask))
 130                                        alive++;
 131                        }
 132                }
 133                if (! alive)
 134                        break;
 135                schedule_timeout_uninterruptible(1);
 136        } while (time_before(jiffies, end_time));
 137        if (alive)
 138                snd_printk(KERN_ERR "timeout: still %d active urbs..\n", alive);
 139        return 0;
 140}
 141
 142/*
 143 * release a substream
 144 */
 145void snd_usb_release_substream_urbs(struct snd_usb_substream *subs, int force)
 146{
 147        int i;
 148
 149        /* stop urbs (to be sure) */
 150        deactivate_urbs(subs, force, 1);
 151        wait_clear_urbs(subs);
 152
 153        for (i = 0; i < MAX_URBS; i++)
 154                release_urb_ctx(&subs->dataurb[i]);
 155        for (i = 0; i < SYNC_URBS; i++)
 156                release_urb_ctx(&subs->syncurb[i]);
 157        usb_free_coherent(subs->dev, SYNC_URBS * 4,
 158                        subs->syncbuf, subs->sync_dma);
 159        subs->syncbuf = NULL;
 160        subs->nurbs = 0;
 161}
 162
 163/*
 164 * complete callback from data urb
 165 */
 166static void snd_complete_urb(struct urb *urb)
 167{
 168        struct snd_urb_ctx *ctx = urb->context;
 169        struct snd_usb_substream *subs = ctx->subs;
 170        struct snd_pcm_substream *substream = ctx->subs->pcm_substream;
 171        int err = 0;
 172
 173        if ((subs->running && subs->ops.retire(subs, substream->runtime, urb)) ||
 174            !subs->running || /* can be stopped during retire callback */
 175            (err = subs->ops.prepare(subs, substream->runtime, urb)) < 0 ||
 176            (err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
 177                clear_bit(ctx->index, &subs->active_mask);
 178                if (err < 0) {
 179                        snd_printd(KERN_ERR "cannot submit urb (err = %d)\n", err);
 180                        snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
 181                }
 182        }
 183}
 184
 185
 186/*
 187 * complete callback from sync urb
 188 */
 189static void snd_complete_sync_urb(struct urb *urb)
 190{
 191        struct snd_urb_ctx *ctx = urb->context;
 192        struct snd_usb_substream *subs = ctx->subs;
 193        struct snd_pcm_substream *substream = ctx->subs->pcm_substream;
 194        int err = 0;
 195
 196        if ((subs->running && subs->ops.retire_sync(subs, substream->runtime, urb)) ||
 197            !subs->running || /* can be stopped during retire callback */
 198            (err = subs->ops.prepare_sync(subs, substream->runtime, urb)) < 0 ||
 199            (err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
 200                clear_bit(ctx->index + 16, &subs->active_mask);
 201                if (err < 0) {
 202                        snd_printd(KERN_ERR "cannot submit sync urb (err = %d)\n", err);
 203                        snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
 204                }
 205        }
 206}
 207
 208
 209/*
 210 * initialize a substream for plaback/capture
 211 */
 212int snd_usb_init_substream_urbs(struct snd_usb_substream *subs,
 213                                unsigned int period_bytes,
 214                                unsigned int rate,
 215                                unsigned int frame_bits)
 216{
 217        unsigned int maxsize, i;
 218        int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
 219        unsigned int urb_packs, total_packs, packs_per_ms;
 220        struct snd_usb_audio *chip = subs->stream->chip;
 221
 222        /* calculate the frequency in 16.16 format */
 223        if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
 224                subs->freqn = get_usb_full_speed_rate(rate);
 225        else
 226                subs->freqn = get_usb_high_speed_rate(rate);
 227        subs->freqm = subs->freqn;
 228        subs->freqshift = INT_MIN;
 229        /* calculate max. frequency */
 230        if (subs->maxpacksize) {
 231                /* whatever fits into a max. size packet */
 232                maxsize = subs->maxpacksize;
 233                subs->freqmax = (maxsize / (frame_bits >> 3))
 234                                << (16 - subs->datainterval);
 235        } else {
 236                /* no max. packet size: just take 25% higher than nominal */
 237                subs->freqmax = subs->freqn + (subs->freqn >> 2);
 238                maxsize = ((subs->freqmax + 0xffff) * (frame_bits >> 3))
 239                                >> (16 - subs->datainterval);
 240        }
 241        subs->phase = 0;
 242
 243        if (subs->fill_max)
 244                subs->curpacksize = subs->maxpacksize;
 245        else
 246                subs->curpacksize = maxsize;
 247
 248        if (snd_usb_get_speed(subs->dev) != USB_SPEED_FULL)
 249                packs_per_ms = 8 >> subs->datainterval;
 250        else
 251                packs_per_ms = 1;
 252
 253        if (is_playback) {
 254                urb_packs = max(chip->nrpacks, 1);
 255                urb_packs = min(urb_packs, (unsigned int)MAX_PACKS);
 256        } else
 257                urb_packs = 1;
 258        urb_packs *= packs_per_ms;
 259        if (subs->syncpipe)
 260                urb_packs = min(urb_packs, 1U << subs->syncinterval);
 261
 262        /* decide how many packets to be used */
 263        if (is_playback) {
 264                unsigned int minsize, maxpacks;
 265                /* determine how small a packet can be */
 266                minsize = (subs->freqn >> (16 - subs->datainterval))
 267                          * (frame_bits >> 3);
 268                /* with sync from device, assume it can be 12% lower */
 269                if (subs->syncpipe)
 270                        minsize -= minsize >> 3;
 271                minsize = max(minsize, 1u);
 272                total_packs = (period_bytes + minsize - 1) / minsize;
 273                /* we need at least two URBs for queueing */
 274                if (total_packs < 2) {
 275                        total_packs = 2;
 276                } else {
 277                        /* and we don't want too long a queue either */
 278                        maxpacks = max(MAX_QUEUE * packs_per_ms, urb_packs * 2);
 279                        total_packs = min(total_packs, maxpacks);
 280                }
 281        } else {
 282                while (urb_packs > 1 && urb_packs * maxsize >= period_bytes)
 283                        urb_packs >>= 1;
 284                total_packs = MAX_URBS * urb_packs;
 285        }
 286        subs->nurbs = (total_packs + urb_packs - 1) / urb_packs;
 287        if (subs->nurbs > MAX_URBS) {
 288                /* too much... */
 289                subs->nurbs = MAX_URBS;
 290                total_packs = MAX_URBS * urb_packs;
 291        } else if (subs->nurbs < 2) {
 292                /* too little - we need at least two packets
 293                 * to ensure contiguous playback/capture
 294                 */
 295                subs->nurbs = 2;
 296        }
 297
 298        /* allocate and initialize data urbs */
 299        for (i = 0; i < subs->nurbs; i++) {
 300                struct snd_urb_ctx *u = &subs->dataurb[i];
 301                u->index = i;
 302                u->subs = subs;
 303                u->packets = (i + 1) * total_packs / subs->nurbs
 304                        - i * total_packs / subs->nurbs;
 305                u->buffer_size = maxsize * u->packets;
 306                if (subs->fmt_type == UAC_FORMAT_TYPE_II)
 307                        u->packets++; /* for transfer delimiter */
 308                u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
 309                if (!u->urb)
 310                        goto out_of_memory;
 311                u->urb->transfer_buffer =
 312                        usb_alloc_coherent(subs->dev, u->buffer_size,
 313                                           GFP_KERNEL, &u->urb->transfer_dma);
 314                if (!u->urb->transfer_buffer)
 315                        goto out_of_memory;
 316                u->urb->pipe = subs->datapipe;
 317                u->urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
 318                u->urb->interval = 1 << subs->datainterval;
 319                u->urb->context = u;
 320                u->urb->complete = snd_complete_urb;
 321        }
 322
 323        if (subs->syncpipe) {
 324                /* allocate and initialize sync urbs */
 325                subs->syncbuf = usb_alloc_coherent(subs->dev, SYNC_URBS * 4,
 326                                                 GFP_KERNEL, &subs->sync_dma);
 327                if (!subs->syncbuf)
 328                        goto out_of_memory;
 329                for (i = 0; i < SYNC_URBS; i++) {
 330                        struct snd_urb_ctx *u = &subs->syncurb[i];
 331                        u->index = i;
 332                        u->subs = subs;
 333                        u->packets = 1;
 334                        u->urb = usb_alloc_urb(1, GFP_KERNEL);
 335                        if (!u->urb)
 336                                goto out_of_memory;
 337                        u->urb->transfer_buffer = subs->syncbuf + i * 4;
 338                        u->urb->transfer_dma = subs->sync_dma + i * 4;
 339                        u->urb->transfer_buffer_length = 4;
 340                        u->urb->pipe = subs->syncpipe;
 341                        u->urb->transfer_flags = URB_ISO_ASAP |
 342                                                 URB_NO_TRANSFER_DMA_MAP;
 343                        u->urb->number_of_packets = 1;
 344                        u->urb->interval = 1 << subs->syncinterval;
 345                        u->urb->context = u;
 346                        u->urb->complete = snd_complete_sync_urb;
 347                }
 348        }
 349        return 0;
 350
 351out_of_memory:
 352        snd_usb_release_substream_urbs(subs, 0);
 353        return -ENOMEM;
 354}
 355
 356/*
 357 * prepare urb for full speed capture sync pipe
 358 *
 359 * fill the length and offset of each urb descriptor.
 360 * the fixed 10.14 frequency is passed through the pipe.
 361 */
 362static int prepare_capture_sync_urb(struct snd_usb_substream *subs,
 363                                    struct snd_pcm_runtime *runtime,
 364                                    struct urb *urb)
 365{
 366        unsigned char *cp = urb->transfer_buffer;
 367        struct snd_urb_ctx *ctx = urb->context;
 368
 369        urb->dev = ctx->subs->dev; /* we need to set this at each time */
 370        urb->iso_frame_desc[0].length = 3;
 371        urb->iso_frame_desc[0].offset = 0;
 372        cp[0] = subs->freqn >> 2;
 373        cp[1] = subs->freqn >> 10;
 374        cp[2] = subs->freqn >> 18;
 375        return 0;
 376}
 377
 378/*
 379 * prepare urb for high speed capture sync pipe
 380 *
 381 * fill the length and offset of each urb descriptor.
 382 * the fixed 12.13 frequency is passed as 16.16 through the pipe.
 383 */
 384static int prepare_capture_sync_urb_hs(struct snd_usb_substream *subs,
 385                                       struct snd_pcm_runtime *runtime,
 386                                       struct urb *urb)
 387{
 388        unsigned char *cp = urb->transfer_buffer;
 389        struct snd_urb_ctx *ctx = urb->context;
 390
 391        urb->dev = ctx->subs->dev; /* we need to set this at each time */
 392        urb->iso_frame_desc[0].length = 4;
 393        urb->iso_frame_desc[0].offset = 0;
 394        cp[0] = subs->freqn;
 395        cp[1] = subs->freqn >> 8;
 396        cp[2] = subs->freqn >> 16;
 397        cp[3] = subs->freqn >> 24;
 398        return 0;
 399}
 400
 401/*
 402 * process after capture sync complete
 403 * - nothing to do
 404 */
 405static int retire_capture_sync_urb(struct snd_usb_substream *subs,
 406                                   struct snd_pcm_runtime *runtime,
 407                                   struct urb *urb)
 408{
 409        return 0;
 410}
 411
 412/*
 413 * prepare urb for capture data pipe
 414 *
 415 * fill the offset and length of each descriptor.
 416 *
 417 * we use a temporary buffer to write the captured data.
 418 * since the length of written data is determined by host, we cannot
 419 * write onto the pcm buffer directly...  the data is thus copied
 420 * later at complete callback to the global buffer.
 421 */
 422static int prepare_capture_urb(struct snd_usb_substream *subs,
 423                               struct snd_pcm_runtime *runtime,
 424                               struct urb *urb)
 425{
 426        int i, offs;
 427        struct snd_urb_ctx *ctx = urb->context;
 428
 429        offs = 0;
 430        urb->dev = ctx->subs->dev; /* we need to set this at each time */
 431        for (i = 0; i < ctx->packets; i++) {
 432                urb->iso_frame_desc[i].offset = offs;
 433                urb->iso_frame_desc[i].length = subs->curpacksize;
 434                offs += subs->curpacksize;
 435        }
 436        urb->transfer_buffer_length = offs;
 437        urb->number_of_packets = ctx->packets;
 438        return 0;
 439}
 440
 441/*
 442 * process after capture complete
 443 *
 444 * copy the data from each desctiptor to the pcm buffer, and
 445 * update the current position.
 446 */
 447static int retire_capture_urb(struct snd_usb_substream *subs,
 448                              struct snd_pcm_runtime *runtime,
 449                              struct urb *urb)
 450{
 451        unsigned long flags;
 452        unsigned char *cp;
 453        int i;
 454        unsigned int stride, frames, bytes, oldptr;
 455        int period_elapsed = 0;
 456
 457        stride = runtime->frame_bits >> 3;
 458
 459        for (i = 0; i < urb->number_of_packets; i++) {
 460                cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
 461                if (urb->iso_frame_desc[i].status) {
 462                        snd_printd(KERN_ERR "frame %d active: %d\n", i, urb->iso_frame_desc[i].status);
 463                        // continue;
 464                }
 465                bytes = urb->iso_frame_desc[i].actual_length;
 466                frames = bytes / stride;
 467                if (!subs->txfr_quirk)
 468                        bytes = frames * stride;
 469                if (bytes % (runtime->sample_bits >> 3) != 0) {
 470#ifdef CONFIG_SND_DEBUG_VERBOSE
 471                        int oldbytes = bytes;
 472#endif
 473                        bytes = frames * stride;
 474                        snd_printdd(KERN_ERR "Corrected urb data len. %d->%d\n",
 475                                                        oldbytes, bytes);
 476                }
 477                /* update the current pointer */
 478                spin_lock_irqsave(&subs->lock, flags);
 479                oldptr = subs->hwptr_done;
 480                subs->hwptr_done += bytes;
 481                if (subs->hwptr_done >= runtime->buffer_size * stride)
 482                        subs->hwptr_done -= runtime->buffer_size * stride;
 483                frames = (bytes + (oldptr % stride)) / stride;
 484                subs->transfer_done += frames;
 485                if (subs->transfer_done >= runtime->period_size) {
 486                        subs->transfer_done -= runtime->period_size;
 487                        period_elapsed = 1;
 488                }
 489                spin_unlock_irqrestore(&subs->lock, flags);
 490                /* copy a data chunk */
 491                if (oldptr + bytes > runtime->buffer_size * stride) {
 492                        unsigned int bytes1 =
 493                                        runtime->buffer_size * stride - oldptr;
 494                        memcpy(runtime->dma_area + oldptr, cp, bytes1);
 495                        memcpy(runtime->dma_area, cp + bytes1, bytes - bytes1);
 496                } else {
 497                        memcpy(runtime->dma_area + oldptr, cp, bytes);
 498                }
 499        }
 500        if (period_elapsed)
 501                snd_pcm_period_elapsed(subs->pcm_substream);
 502        return 0;
 503}
 504
 505/*
 506 * Process after capture complete when paused.  Nothing to do.
 507 */
 508static int retire_paused_capture_urb(struct snd_usb_substream *subs,
 509                                     struct snd_pcm_runtime *runtime,
 510                                     struct urb *urb)
 511{
 512        return 0;
 513}
 514
 515
 516/*
 517 * prepare urb for playback sync pipe
 518 *
 519 * set up the offset and length to receive the current frequency.
 520 */
 521static int prepare_playback_sync_urb(struct snd_usb_substream *subs,
 522                                     struct snd_pcm_runtime *runtime,
 523                                     struct urb *urb)
 524{
 525        struct snd_urb_ctx *ctx = urb->context;
 526
 527        urb->dev = ctx->subs->dev; /* we need to set this at each time */
 528        urb->iso_frame_desc[0].length = min(4u, ctx->subs->syncmaxsize);
 529        urb->iso_frame_desc[0].offset = 0;
 530        return 0;
 531}
 532
 533/*
 534 * process after playback sync complete
 535 *
 536 * Full speed devices report feedback values in 10.14 format as samples per
 537 * frame, high speed devices in 16.16 format as samples per microframe.
 538 * Because the Audio Class 1 spec was written before USB 2.0, many high speed
 539 * devices use a wrong interpretation, some others use an entirely different
 540 * format.  Therefore, we cannot predict what format any particular device uses
 541 * and must detect it automatically.
 542 */
 543static int retire_playback_sync_urb(struct snd_usb_substream *subs,
 544                                    struct snd_pcm_runtime *runtime,
 545                                    struct urb *urb)
 546{
 547        unsigned int f;
 548        int shift;
 549        unsigned long flags;
 550
 551        if (urb->iso_frame_desc[0].status != 0 ||
 552            urb->iso_frame_desc[0].actual_length < 3)
 553                return 0;
 554
 555        f = le32_to_cpup(urb->transfer_buffer);
 556        if (urb->iso_frame_desc[0].actual_length == 3)
 557                f &= 0x00ffffff;
 558        else
 559                f &= 0x0fffffff;
 560        if (f == 0)
 561                return 0;
 562
 563        if (unlikely(subs->freqshift == INT_MIN)) {
 564                /*
 565                 * The first time we see a feedback value, determine its format
 566                 * by shifting it left or right until it matches the nominal
 567                 * frequency value.  This assumes that the feedback does not
 568                 * differ from the nominal value more than +50% or -25%.
 569                 */
 570                shift = 0;
 571                while (f < subs->freqn - subs->freqn / 4) {
 572                        f <<= 1;
 573                        shift++;
 574                }
 575                while (f > subs->freqn + subs->freqn / 2) {
 576                        f >>= 1;
 577                        shift--;
 578                }
 579                subs->freqshift = shift;
 580        }
 581        else if (subs->freqshift >= 0)
 582                f <<= subs->freqshift;
 583        else
 584                f >>= -subs->freqshift;
 585
 586        if (likely(f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax)) {
 587                /*
 588                 * If the frequency looks valid, set it.
 589                 * This value is referred to in prepare_playback_urb().
 590                 */
 591                spin_lock_irqsave(&subs->lock, flags);
 592                subs->freqm = f;
 593                spin_unlock_irqrestore(&subs->lock, flags);
 594        } else {
 595                /*
 596                 * Out of range; maybe the shift value is wrong.
 597                 * Reset it so that we autodetect again the next time.
 598                 */
 599                subs->freqshift = INT_MIN;
 600        }
 601
 602        return 0;
 603}
 604
 605/* determine the number of frames in the next packet */
 606static int snd_usb_audio_next_packet_size(struct snd_usb_substream *subs)
 607{
 608        if (subs->fill_max)
 609                return subs->maxframesize;
 610        else {
 611                subs->phase = (subs->phase & 0xffff)
 612                        + (subs->freqm << subs->datainterval);
 613                return min(subs->phase >> 16, subs->maxframesize);
 614        }
 615}
 616
 617/*
 618 * Prepare urb for streaming before playback starts or when paused.
 619 *
 620 * We don't have any data, so we send silence.
 621 */
 622static int prepare_nodata_playback_urb(struct snd_usb_substream *subs,
 623                                       struct snd_pcm_runtime *runtime,
 624                                       struct urb *urb)
 625{
 626        unsigned int i, offs, counts;
 627        struct snd_urb_ctx *ctx = urb->context;
 628        int stride = runtime->frame_bits >> 3;
 629
 630        offs = 0;
 631        urb->dev = ctx->subs->dev;
 632        for (i = 0; i < ctx->packets; ++i) {
 633                counts = snd_usb_audio_next_packet_size(subs);
 634                urb->iso_frame_desc[i].offset = offs * stride;
 635                urb->iso_frame_desc[i].length = counts * stride;
 636                offs += counts;
 637        }
 638        urb->number_of_packets = ctx->packets;
 639        urb->transfer_buffer_length = offs * stride;
 640        memset(urb->transfer_buffer,
 641               runtime->format == SNDRV_PCM_FORMAT_U8 ? 0x80 : 0,
 642               offs * stride);
 643        return 0;
 644}
 645
 646/*
 647 * prepare urb for playback data pipe
 648 *
 649 * Since a URB can handle only a single linear buffer, we must use double
 650 * buffering when the data to be transferred overflows the buffer boundary.
 651 * To avoid inconsistencies when updating hwptr_done, we use double buffering
 652 * for all URBs.
 653 */
 654static int prepare_playback_urb(struct snd_usb_substream *subs,
 655                                struct snd_pcm_runtime *runtime,
 656                                struct urb *urb)
 657{
 658        int i, stride;
 659        unsigned int counts, frames, bytes;
 660        unsigned long flags;
 661        int period_elapsed = 0;
 662        struct snd_urb_ctx *ctx = urb->context;
 663
 664        stride = runtime->frame_bits >> 3;
 665
 666        frames = 0;
 667        urb->dev = ctx->subs->dev; /* we need to set this at each time */
 668        urb->number_of_packets = 0;
 669        spin_lock_irqsave(&subs->lock, flags);
 670        for (i = 0; i < ctx->packets; i++) {
 671                counts = snd_usb_audio_next_packet_size(subs);
 672                /* set up descriptor */
 673                urb->iso_frame_desc[i].offset = frames * stride;
 674                urb->iso_frame_desc[i].length = counts * stride;
 675                frames += counts;
 676                urb->number_of_packets++;
 677                subs->transfer_done += counts;
 678                if (subs->transfer_done >= runtime->period_size) {
 679                        subs->transfer_done -= runtime->period_size;
 680                        period_elapsed = 1;
 681                        if (subs->fmt_type == UAC_FORMAT_TYPE_II) {
 682                                if (subs->transfer_done > 0) {
 683                                        /* FIXME: fill-max mode is not
 684                                         * supported yet */
 685                                        frames -= subs->transfer_done;
 686                                        counts -= subs->transfer_done;
 687                                        urb->iso_frame_desc[i].length =
 688                                                counts * stride;
 689                                        subs->transfer_done = 0;
 690                                }
 691                                i++;
 692                                if (i < ctx->packets) {
 693                                        /* add a transfer delimiter */
 694                                        urb->iso_frame_desc[i].offset =
 695                                                frames * stride;
 696                                        urb->iso_frame_desc[i].length = 0;
 697                                        urb->number_of_packets++;
 698                                }
 699                                break;
 700                        }
 701                }
 702                if (period_elapsed) /* finish at the period boundary */
 703                        break;
 704        }
 705        bytes = frames * stride;
 706        if (subs->hwptr_done + bytes > runtime->buffer_size * stride) {
 707                /* err, the transferred area goes over buffer boundary. */
 708                unsigned int bytes1 =
 709                        runtime->buffer_size * stride - subs->hwptr_done;
 710                memcpy(urb->transfer_buffer,
 711                       runtime->dma_area + subs->hwptr_done, bytes1);
 712                memcpy(urb->transfer_buffer + bytes1,
 713                       runtime->dma_area, bytes - bytes1);
 714        } else {
 715                memcpy(urb->transfer_buffer,
 716                       runtime->dma_area + subs->hwptr_done, bytes);
 717        }
 718        subs->hwptr_done += bytes;
 719        if (subs->hwptr_done >= runtime->buffer_size * stride)
 720                subs->hwptr_done -= runtime->buffer_size * stride;
 721        runtime->delay += frames;
 722        spin_unlock_irqrestore(&subs->lock, flags);
 723        urb->transfer_buffer_length = bytes;
 724        if (period_elapsed)
 725                snd_pcm_period_elapsed(subs->pcm_substream);
 726        return 0;
 727}
 728
 729/*
 730 * process after playback data complete
 731 * - decrease the delay count again
 732 */
 733static int retire_playback_urb(struct snd_usb_substream *subs,
 734                               struct snd_pcm_runtime *runtime,
 735                               struct urb *urb)
 736{
 737        unsigned long flags;
 738        int stride = runtime->frame_bits >> 3;
 739        int processed = urb->transfer_buffer_length / stride;
 740
 741        spin_lock_irqsave(&subs->lock, flags);
 742        if (processed > runtime->delay)
 743                runtime->delay = 0;
 744        else
 745                runtime->delay -= processed;
 746        spin_unlock_irqrestore(&subs->lock, flags);
 747        return 0;
 748}
 749
 750static const char *usb_error_string(int err)
 751{
 752        switch (err) {
 753        case -ENODEV:
 754                return "no device";
 755        case -ENOENT:
 756                return "endpoint not enabled";
 757        case -EPIPE:
 758                return "endpoint stalled";
 759        case -ENOSPC:
 760                return "not enough bandwidth";
 761        case -ESHUTDOWN:
 762                return "device disabled";
 763        case -EHOSTUNREACH:
 764                return "device suspended";
 765        case -EINVAL:
 766        case -EAGAIN:
 767        case -EFBIG:
 768        case -EMSGSIZE:
 769                return "internal error";
 770        default:
 771                return "unknown error";
 772        }
 773}
 774
 775/*
 776 * set up and start data/sync urbs
 777 */
 778static int start_urbs(struct snd_usb_substream *subs, struct snd_pcm_runtime *runtime)
 779{
 780        unsigned int i;
 781        int err;
 782
 783        if (subs->stream->chip->shutdown)
 784                return -EBADFD;
 785
 786        for (i = 0; i < subs->nurbs; i++) {
 787                if (snd_BUG_ON(!subs->dataurb[i].urb))
 788                        return -EINVAL;
 789                if (subs->ops.prepare(subs, runtime, subs->dataurb[i].urb) < 0) {
 790                        snd_printk(KERN_ERR "cannot prepare datapipe for urb %d\n", i);
 791                        goto __error;
 792                }
 793        }
 794        if (subs->syncpipe) {
 795                for (i = 0; i < SYNC_URBS; i++) {
 796                        if (snd_BUG_ON(!subs->syncurb[i].urb))
 797                                return -EINVAL;
 798                        if (subs->ops.prepare_sync(subs, runtime, subs->syncurb[i].urb) < 0) {
 799                                snd_printk(KERN_ERR "cannot prepare syncpipe for urb %d\n", i);
 800                                goto __error;
 801                        }
 802                }
 803        }
 804
 805        subs->active_mask = 0;
 806        subs->unlink_mask = 0;
 807        subs->running = 1;
 808        for (i = 0; i < subs->nurbs; i++) {
 809                err = usb_submit_urb(subs->dataurb[i].urb, GFP_ATOMIC);
 810                if (err < 0) {
 811                        snd_printk(KERN_ERR "cannot submit datapipe "
 812                                   "for urb %d, error %d: %s\n",
 813                                   i, err, usb_error_string(err));
 814                        goto __error;
 815                }
 816                set_bit(i, &subs->active_mask);
 817        }
 818        if (subs->syncpipe) {
 819                for (i = 0; i < SYNC_URBS; i++) {
 820                        err = usb_submit_urb(subs->syncurb[i].urb, GFP_ATOMIC);
 821                        if (err < 0) {
 822                                snd_printk(KERN_ERR "cannot submit syncpipe "
 823                                           "for urb %d, error %d: %s\n",
 824                                           i, err, usb_error_string(err));
 825                                goto __error;
 826                        }
 827                        set_bit(i + 16, &subs->active_mask);
 828                }
 829        }
 830        return 0;
 831
 832 __error:
 833        // snd_pcm_stop(subs->pcm_substream, SNDRV_PCM_STATE_XRUN);
 834        deactivate_urbs(subs, 0, 0);
 835        return -EPIPE;
 836}
 837
 838
 839/*
 840 */
 841static struct snd_urb_ops audio_urb_ops[2] = {
 842        {
 843                .prepare =      prepare_nodata_playback_urb,
 844                .retire =       retire_playback_urb,
 845                .prepare_sync = prepare_playback_sync_urb,
 846                .retire_sync =  retire_playback_sync_urb,
 847        },
 848        {
 849                .prepare =      prepare_capture_urb,
 850                .retire =       retire_capture_urb,
 851                .prepare_sync = prepare_capture_sync_urb,
 852                .retire_sync =  retire_capture_sync_urb,
 853        },
 854};
 855
 856/*
 857 * initialize the substream instance.
 858 */
 859
 860void snd_usb_init_substream(struct snd_usb_stream *as,
 861                            int stream, struct audioformat *fp)
 862{
 863        struct snd_usb_substream *subs = &as->substream[stream];
 864
 865        INIT_LIST_HEAD(&subs->fmt_list);
 866        spin_lock_init(&subs->lock);
 867
 868        subs->stream = as;
 869        subs->direction = stream;
 870        subs->dev = as->chip->dev;
 871        subs->txfr_quirk = as->chip->txfr_quirk;
 872        subs->ops = audio_urb_ops[stream];
 873        if (snd_usb_get_speed(subs->dev) >= USB_SPEED_HIGH)
 874                subs->ops.prepare_sync = prepare_capture_sync_urb_hs;
 875
 876        snd_usb_set_pcm_ops(as->pcm, stream);
 877
 878        list_add_tail(&fp->list, &subs->fmt_list);
 879        subs->formats |= fp->formats;
 880        subs->endpoint = fp->endpoint;
 881        subs->num_formats++;
 882        subs->fmt_type = fp->fmt_type;
 883}
 884
 885int snd_usb_substream_playback_trigger(struct snd_pcm_substream *substream, int cmd)
 886{
 887        struct snd_usb_substream *subs = substream->runtime->private_data;
 888
 889        switch (cmd) {
 890        case SNDRV_PCM_TRIGGER_START:
 891        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 892                subs->ops.prepare = prepare_playback_urb;
 893                return 0;
 894        case SNDRV_PCM_TRIGGER_STOP:
 895                return deactivate_urbs(subs, 0, 0);
 896        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 897                subs->ops.prepare = prepare_nodata_playback_urb;
 898                return 0;
 899        }
 900
 901        return -EINVAL;
 902}
 903
 904int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream, int cmd)
 905{
 906        struct snd_usb_substream *subs = substream->runtime->private_data;
 907
 908        switch (cmd) {
 909        case SNDRV_PCM_TRIGGER_START:
 910                subs->ops.retire = retire_capture_urb;
 911                return start_urbs(subs, substream->runtime);
 912        case SNDRV_PCM_TRIGGER_STOP:
 913                return deactivate_urbs(subs, 0, 0);
 914        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 915                subs->ops.retire = retire_paused_capture_urb;
 916                return 0;
 917        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 918                subs->ops.retire = retire_capture_urb;
 919                return 0;
 920        }
 921
 922        return -EINVAL;
 923}
 924
 925int snd_usb_substream_prepare(struct snd_usb_substream *subs,
 926                              struct snd_pcm_runtime *runtime)
 927{
 928        /* clear urbs (to be sure) */
 929        deactivate_urbs(subs, 0, 1);
 930        wait_clear_urbs(subs);
 931
 932        /* for playback, submit the URBs now; otherwise, the first hwptr_done
 933         * updates for all URBs would happen at the same time when starting */
 934        if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) {
 935                subs->ops.prepare = prepare_nodata_playback_urb;
 936                return start_urbs(subs, runtime);
 937        }
 938
 939        return 0;
 940}
 941
 942