linux-old/drivers/usb/audio.c
<<
>>
Prefs
   1/*****************************************************************************/
   2
   3/*
   4 *      audio.c  --  USB Audio Class driver
   5 *
   6 *      Copyright (C) 1999, 2000, 2001
   7 *          Alan Cox (alan@lxorguk.ukuu.org.uk)
   8 *          Thomas Sailer (sailer@ife.ee.ethz.ch)
   9 *
  10 *      This program is free software; you can redistribute it and/or modify
  11 *      it under the terms of the GNU General Public License as published by
  12 *      the Free Software Foundation; either version 2 of the License, or
  13 *      (at your option) any later version.
  14 *
  15 * Debugging:
  16 *      Use the 'lsusb' utility to dump the descriptors.
  17 *
  18 * 1999-09-07:  Alan Cox
  19 *              Parsing Audio descriptor patch
  20 * 1999-09-08:  Thomas Sailer
  21 *              Added OSS compatible data io functions; both parts of the
  22 *              driver remain to be glued together
  23 * 1999-09-10:  Thomas Sailer
  24 *              Beautified the driver. Added sample format conversions.
  25 *              Still not properly glued with the parsing code.
  26 *              The parsing code seems to have its problems btw,
  27 *              Since it parses all available configs but doesn't
  28 *              store which iface/altsetting belongs to which config.
  29 * 1999-09-20:  Thomas Sailer
  30 *              Threw out Alan's parsing code and implemented my own one.
  31 *              You cannot reasonnably linearly parse audio descriptors,
  32 *              especially the AudioClass descriptors have to be considered
  33 *              pointer lists. Mixer parsing untested, due to lack of device.
  34 *              First stab at synch pipe implementation, the Dallas USB DAC
  35 *              wants to use an Asynch out pipe. usb_audio_state now basically
  36 *              only contains lists of mixer and wave devices. We can therefore
  37 *              now have multiple mixer/wave devices per USB device.
  38 * 1999-10-28:  Thomas Sailer
  39 *              Converted to URB API. Fixed a taskstate/wakeup semantics mistake
  40 *              that made the driver consume all available CPU cycles.
  41 *              Now runs stable on UHCI-Acher/Fliegl/Sailer.
  42 * 1999-10-31:  Thomas Sailer
  43 *              Audio can now be unloaded if it is not in use by any mixer
  44 *              or dsp client (formerly you had to disconnect the audio devices
  45 *              from the USB port)
  46 *              Finally, about three months after ordering, my "Maxxtro SPK222"
  47 *              speakers arrived, isn't disdata a great mail order company 8-)
  48 *              Parse class specific endpoint descriptor of the audiostreaming
  49 *              interfaces and take the endpoint attributes from there.
  50 *              Unbelievably, the Philips USB DAC has a sampling rate range
  51 *              of over a decade, yet does not support the sampling rate control!
  52 *              No wonder it sounds so bad, has very audible sampling rate
  53 *              conversion distortion. Don't try to listen to it using
  54 *              decent headphones!
  55 *              "Let's make things better" -> but please Philips start with your
  56 *              own stuff!!!!
  57 * 1999-11-02:  Thomas Sailer
  58 *              It takes the Philips boxes several seconds to acquire synchronisation
  59 *              that means they won't play short sounds. Should probably maintain
  60 *              the ISO datastream even if there's nothing to play.
  61 *              Fix counting the total_bytes counter, RealPlayer G2 depends on it.
  62 * 1999-12-20:  Thomas Sailer
  63 *              Fix bad bug in conversion to per interface probing.
  64 *              disconnect was called multiple times for the audio device,
  65 *              leading to a premature freeing of the audio structures
  66 * 2000-05-13:  Thomas Sailer
  67 *              I don't remember who changed the find_format routine,
  68 *              but the change was completely broken for the Dallas
  69 *              chip. Anyway taking sampling rate into account in find_format
  70 *              is bad and should not be done unless there are devices with
  71 *              completely broken audio descriptors. Unless someone shows
  72 *              me such a descriptor, I will not allow find_format to
  73 *              take the sampling rate into account.
  74 *              Also, the former find_format made:
  75 *              - mpg123 play mono instead of stereo
  76 *              - sox completely fail for wav's with sample rates < 44.1kHz
  77 *                  for the Dallas chip.
  78 *              Also fix a rather long standing problem with applications that
  79 *              use "small" writes producing no sound at all.
  80 * 2000-05-15:  Thomas Sailer
  81 *              My fears came true, the Philips camera indeed has pretty stupid
  82 *              audio descriptors.
  83 * 2000-05-17:  Thomas Sailer
  84 *              Nemsoft spotted my stupid last minute change, thanks
  85 * 2000-05-19:  Thomas Sailer
  86 *              Fixed FEATURE_UNIT thinkos found thanks to the KC Technology
  87 *              Xtend device. Basically the driver treated FEATURE_UNIT's sourced
  88 *              by mono terminals as stereo.
  89 * 2000-05-20:  Thomas Sailer
  90 *              SELECTOR support (and thus selecting record channels from the mixer).
  91 *              Somewhat peculiar due to OSS interface limitations. Only works
  92 *              for channels where a "slider" is already in front of it (i.e.
  93 *              a MIXER unit or a FEATURE unit with volume capability).
  94 * 2000-11-26:  Thomas Sailer
  95 *              Workaround for Dallas DS4201. The DS4201 uses PCM8 as format tag for
  96 *              its 8 bit modes, but expects signed data (and should therefore have used PCM).
  97 * 2001-03-10:  Thomas Sailer
  98 *              provide abs function, prevent picking up a bogus kernel macro
  99 *              for abs. Bug report by Andrew Morton <andrewm@uow.edu.au>
 100 * 2001-06-16:  Bryce Nesbitt <bryce@obviously.com>
 101 *              Fix SNDCTL_DSP_STEREO API violation
 102 * 2002-10-16:  Monty <monty@xiph.org>
 103 *              Expand device support from a maximum of 8/16bit,mono/stereo to 
 104 *              8/16/24/32bit,N channels.  Add AFMT_?24_?? and AFMT_?32_?? to OSS
 105 *              functionality. Tested and used in production with the emagic emi 2|6 
 106 *              on PPC and Intel. Also fixed a few logic 'crash and burn' corner 
 107 *              cases.
 108 * 2003-06-30:  Thomas Sailer
 109 *              Fix SETTRIGGER non OSS API conformity
 110 */
 111
 112/*
 113 * Strategy:
 114 *
 115 * Alan Cox and Thomas Sailer are starting to dig at opposite ends and
 116 * are hoping to meet in the middle, just like tunnel diggers :)
 117 * Alan tackles the descriptor parsing, Thomas the actual data IO and the
 118 * OSS compatible interface.
 119 *
 120 * Data IO implementation issues
 121 *
 122 * A mmap'able ring buffer per direction is implemented, because
 123 * almost every OSS app expects it. It is however impractical to
 124 * transmit/receive USB data directly into and out of the ring buffer,
 125 * due to alignment and synchronisation issues. Instead, the ring buffer
 126 * feeds a constant time delay line that handles the USB issues.
 127 *
 128 * Now we first try to find an alternate setting that exactly matches
 129 * the sample format requested by the user. If we find one, we do not
 130 * need to perform any sample rate conversions. If there is no matching
 131 * altsetting, we choose the closest one and perform sample format
 132 * conversions. We never do sample rate conversion; these are too
 133 * expensive to be performed in the kernel.
 134 *
 135 * Current status:
 136 * - Pretty stable on UHCI-Acher/Fliegl/Sailer
 137 * - Does not work on OHCI due to lack of OHCI driver supporting URB's
 138 *
 139 * Generally: Due to the brokenness of the Audio Class spec
 140 * it seems generally impossible to write a generic Audio Class driver,
 141 * so a reasonable driver should implement the features that are actually
 142 * used.
 143 *
 144 * Parsing implementation issues
 145 *
 146 * One cannot reasonably parse the AudioClass descriptors linearly.
 147 * Therefore the current implementation features routines to look
 148 * for a specific descriptor in the descriptor list.
 149 *
 150 * How does the parsing work? First, all interfaces are searched
 151 * for an AudioControl class interface. If found, the config descriptor
 152 * that belongs to the current configuration is fetched from the device.
 153 * Then the HEADER descriptor is fetched. It contains a list of
 154 * all AudioStreaming and MIDIStreaming devices. This list is then walked,
 155 * and all AudioStreaming interfaces are classified into input and output
 156 * interfaces (according to the endpoint0 direction in altsetting1) (MIDIStreaming
 157 * is currently not supported). The input & output list is then used
 158 * to group inputs and outputs together and issued pairwise to the
 159 * AudioStreaming class parser. Finally, all OUTPUT_TERMINAL descriptors
 160 * are walked and issued to the mixer construction routine.
 161 *
 162 * The AudioStreaming parser simply enumerates all altsettings belonging
 163 * to the specified interface. It looks for AS_GENERAL and FORMAT_TYPE
 164 * class specific descriptors to extract the sample format/sample rate
 165 * data. Only sample format types PCM and PCM8 are supported right now, and
 166 * only FORMAT_TYPE_I is handled. The isochronous data endpoint needs to
 167 * be the first endpoint of the interface, and the optional synchronisation
 168 * isochronous endpoint the second one.
 169 *
 170 * Mixer construction works as follows: The various TERMINAL and UNIT
 171 * descriptors span a tree from the root (OUTPUT_TERMINAL) through the
 172 * intermediate nodes (UNITs) to the leaves (INPUT_TERMINAL). We walk
 173 * that tree in a depth first manner. FEATURE_UNITs may contribute volume,
 174 * bass and treble sliders to the mixer, MIXER_UNITs volume sliders.
 175 * The terminal type encoded in the INPUT_TERMINALs feeds a heuristic
 176 * to determine "meaningful" OSS slider numbers, however we will see
 177 * how well this works in practice. Other features are not used at the
 178 * moment, they seem less often used. Also, it seems difficult at least
 179 * to construct recording source switches from SELECTOR_UNITs, but
 180 * since there are not many USB ADC's available, we leave that for later.
 181 */
 182
 183/*****************************************************************************/
 184
 185#include <linux/version.h>
 186#include <linux/kernel.h>
 187#include <linux/slab.h>
 188#include <linux/string.h>
 189#include <linux/timer.h>
 190#include <linux/sched.h>
 191#include <linux/smp_lock.h>
 192#include <linux/module.h>
 193#include <linux/sound.h>
 194#include <linux/soundcard.h>
 195#include <linux/list.h>
 196#include <linux/vmalloc.h>
 197#include <linux/wrapper.h>
 198#include <linux/init.h>
 199#include <linux/poll.h>
 200#include <linux/bitops.h>
 201#include <asm/uaccess.h>
 202#include <asm/io.h>
 203#include <linux/usb.h>
 204
 205#include "audio.h"
 206
 207/*
 208 * Version Information
 209 */
 210#define DRIVER_VERSION "v1.0.0"
 211#define DRIVER_AUTHOR "Alan Cox <alan@lxorguk.ukuu.org.uk>, Thomas Sailer (sailer@ife.ee.ethz.ch)"
 212#define DRIVER_DESC "USB Audio Class driver"
 213
 214#define AUDIO_DEBUG 1
 215
 216#define SND_DEV_DSP16   5 
 217
 218#define dprintk(x)
 219
 220#undef abs
 221extern int abs(int __x) __attribute__ ((__const__)); /* Shut up warning */
 222
 223/* --------------------------------------------------------------------- */
 224
 225/*
 226 * Linked list of all audio devices...
 227 */
 228static struct list_head audiodevs = LIST_HEAD_INIT(audiodevs);
 229static DECLARE_MUTEX(open_sem);
 230
 231/*
 232 * wait queue for processes wanting to open an USB audio device
 233 */
 234static DECLARE_WAIT_QUEUE_HEAD(open_wait);
 235
 236
 237#define MAXFORMATS        MAX_ALT
 238#define DMABUFSHIFT       17  /* 128k worth of DMA buffer */
 239#define NRSGBUF           (1U<<(DMABUFSHIFT-PAGE_SHIFT))
 240
 241#define MAXCHANNELS       32
 242#define MAXWIDTH          4
 243#define MAXSAMPLEWIDTH    (MAXCHANNELS*MAXWIDTH)
 244#define TMPCOPYWIDTH      MAXSAMPLEWIDTH /* max (128,MAXSAMPLEWIDTH) */
 245
 246/*
 247 * This influences:
 248 * - Latency
 249 * - Interrupt rate
 250 * - Synchronisation behaviour
 251 * Don't touch this if you don't understand all of the above.
 252 */
 253#define DESCFRAMES  5
 254#define SYNCFRAMES  DESCFRAMES
 255
 256#define MIXFLG_STEREOIN   1
 257#define MIXFLG_STEREOOUT  2
 258
 259struct mixerchannel {
 260        __u16 value;
 261        __u16 osschannel;  /* number of the OSS channel */
 262        __s16 minval, maxval;
 263        __u16 slctunitid;
 264        __u8 unitid;
 265        __u8 selector;
 266        __u8 chnum;
 267        __u8 flags;
 268};
 269
 270struct audioformat {
 271        unsigned int format;
 272        unsigned int sratelo;
 273        unsigned int sratehi;
 274        unsigned char altsetting;
 275        unsigned char attributes;
 276};
 277
 278struct dmabuf {
 279        /* buffer data format */
 280        unsigned int format;
 281        unsigned int srate;
 282        /* physical buffer */
 283        unsigned char *sgbuf[NRSGBUF];
 284        unsigned int bufsize;
 285        unsigned int numfrag;
 286        unsigned int fragshift;
 287        unsigned int wrptr, rdptr;
 288        unsigned int total_bytes;
 289        int count;
 290        unsigned int error; /* over/underrun */
 291        wait_queue_head_t wait;
 292        /* redundant, but makes calculations easier */
 293        unsigned int fragsize;
 294        unsigned int dmasize;
 295        /* OSS stuff */
 296        unsigned int mapped:1;
 297        unsigned int ready:1;
 298        unsigned int enabled:1;
 299        unsigned int ossfragshift;
 300        int ossmaxfrags;
 301        unsigned int subdivision;
 302};
 303
 304struct usb_audio_state;
 305
 306#define FLG_URB0RUNNING   1
 307#define FLG_URB1RUNNING   2
 308#define FLG_SYNC0RUNNING  4
 309#define FLG_SYNC1RUNNING  8
 310#define FLG_RUNNING      16
 311#define FLG_CONNECTED    32
 312
 313struct my_data_urb {
 314        struct urb urb;
 315        struct iso_packet_descriptor isoframe[DESCFRAMES];
 316};
 317
 318struct my_sync_urb {
 319        struct urb urb;
 320        struct iso_packet_descriptor isoframe[SYNCFRAMES];
 321};
 322
 323
 324struct usb_audiodev {
 325        struct list_head list;
 326        struct usb_audio_state *state;
 327        
 328        /* soundcore stuff */
 329        int dev_audio;
 330
 331        /* wave stuff */
 332        mode_t open_mode;
 333        spinlock_t lock;         /* DMA buffer access spinlock */
 334
 335        struct usbin {
 336                int interface;           /* Interface number, -1 means not used */
 337                unsigned int format;     /* USB data format */
 338                unsigned int datapipe;   /* the data input pipe */
 339                unsigned int syncpipe;   /* the synchronisation pipe - 0 for anything but adaptive IN mode */
 340                unsigned int syncinterval;  /* P for adaptive IN mode, 0 otherwise */
 341                unsigned int freqn;      /* nominal sampling rate in USB format, i.e. fs/1000 in Q10.14 */
 342                unsigned int freqmax;    /* maximum sampling rate, used for buffer management */
 343                unsigned int phase;      /* phase accumulator */
 344                unsigned int flags;      /* see FLG_ defines */
 345                
 346                struct my_data_urb durb[2];  /* ISO descriptors for the data endpoint */
 347                struct my_sync_urb surb[2];  /* ISO sync pipe descriptor if needed */
 348                
 349                struct dmabuf dma;
 350        } usbin;
 351
 352        struct usbout {
 353                int interface;           /* Interface number, -1 means not used */
 354                unsigned int format;     /* USB data format */
 355                unsigned int datapipe;   /* the data input pipe */
 356                unsigned int syncpipe;   /* the synchronisation pipe - 0 for anything but asynchronous OUT mode */
 357                unsigned int syncinterval;  /* P for asynchronous OUT mode, 0 otherwise */
 358                unsigned int freqn;      /* nominal sampling rate in USB format, i.e. fs/1000 in Q10.14 */
 359                unsigned int freqm;      /* momentary sampling rate in USB format, i.e. fs/1000 in Q10.14 */
 360                unsigned int freqmax;    /* maximum sampling rate, used for buffer management */
 361                unsigned int phase;      /* phase accumulator */
 362                unsigned int flags;      /* see FLG_ defines */
 363
 364                struct my_data_urb durb[2];  /* ISO descriptors for the data endpoint */
 365                struct my_sync_urb surb[2];  /* ISO sync pipe descriptor if needed */
 366                
 367                struct dmabuf dma;
 368        } usbout;
 369
 370
 371        unsigned int numfmtin, numfmtout;
 372        struct audioformat fmtin[MAXFORMATS];
 373        struct audioformat fmtout[MAXFORMATS];
 374};  
 375
 376struct usb_mixerdev {
 377        struct list_head list;
 378        struct usb_audio_state *state;
 379
 380        /* soundcore stuff */
 381        int dev_mixer;
 382
 383        unsigned char iface;  /* interface number of the AudioControl interface */
 384
 385        /* USB format descriptions */
 386        unsigned int numch, modcnt;
 387
 388        /* mixch is last and gets allocated dynamically */
 389        struct mixerchannel ch[0];
 390};
 391
 392struct usb_audio_state {
 393        struct list_head audiodev;
 394
 395        /* USB device */
 396        struct usb_device *usbdev;
 397
 398        struct list_head audiolist;
 399        struct list_head mixerlist;
 400
 401        unsigned count;  /* usage counter; NOTE: the usb stack is also considered a user */
 402};
 403
 404/* in the event we don't have the extended soundcard.h, we still need
 405   to compile successfully.  Supply definitions */
 406
 407#ifndef AFMT_S24_LE
 408#       define AFMT_S24_LE              0x00000800      
 409#endif
 410#ifndef AFMT_S24_BE
 411#       define AFMT_S24_BE              0x00001000      
 412#endif
 413#ifndef AFMT_U24_LE
 414#       define AFMT_U24_LE              0x00002000      
 415#endif
 416#ifndef AFMT_U24_BE
 417#       define AFMT_U24_BE              0x00004000      
 418#endif
 419#ifndef AFMT_S32_LE
 420#       define AFMT_S32_LE              0x00008000      
 421#endif
 422#ifndef AFMT_S32_BE
 423#       define AFMT_S32_BE              0x00010000      
 424#endif
 425#ifndef AFMT_U32_LE
 426#       define AFMT_U32_LE              0x00020000      
 427#endif
 428#ifndef AFMT_U32_BE
 429#       define AFMT_U32_BE              0x00040000      
 430#endif
 431
 432/* private audio format extensions */
 433#define AFMT_STEREO         0x01000000
 434#define AFMT_CHMASK         0xff000000
 435#define AFMT_8MASK          (AFMT_U8 | AFMT_S8)
 436#define AFMT_16MASK         (AFMT_U16_LE | AFMT_S16_LE | AFMT_U16_BE | AFMT_S16_BE)
 437#define AFMT_24MASK         (AFMT_U24_LE | AFMT_S24_LE | AFMT_U24_BE | AFMT_S24_BE)
 438#define AFMT_32MASK         (AFMT_U32_LE | AFMT_S32_LE | AFMT_U32_BE | AFMT_S32_BE)
 439
 440#define AFMT_SIGNMASK       (AFMT_S8 | AFMT_S16_LE | AFMT_S16_BE |\
 441                                       AFMT_S24_LE | AFMT_S24_BE |\
 442                                       AFMT_S32_LE | AFMT_S32_BE)
 443
 444/* a little odd, but the code counts on byte formats being identified as 'big endian' */
 445#define AFMT_ENDIANMASK     (AFMT_S8 | AFMT_U8 |\
 446                                       AFMT_S16_BE | AFMT_U16_BE |\
 447                                       AFMT_S24_BE | AFMT_U24_BE |\
 448                                       AFMT_S32_BE | AFMT_U32_BE)
 449
 450#define AFMT_ISSTEREO(x)    (((x) & 0xff000000) == AFMT_STEREO)
 451#define AFMT_CHANNELS(x)    (((unsigned)(x) >> 24) + 1)
 452#define AFMT_BYTES(x)       ( (((x)&AFMT_8MASK)!=0)+\
 453                              (((x)&AFMT_16MASK)!=0)*2+\
 454                              (((x)&AFMT_24MASK)!=0)*3+\
 455                              (((x)&AFMT_32MASK)!=0)*4 )
 456#define AFMT_SAMPLEBYTES(x) (AFMT_BYTES(x)*AFMT_CHANNELS(x))
 457#define AFMT_SIGN(x)        ((x)&AFMT_SIGNMASK)
 458#define AFMT_ENDIAN(x)      ((x)&AFMT_ENDIANMASK)
 459
 460
 461/* --------------------------------------------------------------------- */
 462
 463/* prevent picking up a bogus abs macro */
 464#undef abs
 465static inline int abs(int x)
 466{
 467        if (x < 0)
 468                return -x;
 469        return x;
 470}
 471                                
 472/* --------------------------------------------------------------------- */
 473
 474static inline unsigned ld2(unsigned int x)
 475{
 476        unsigned r = 0;
 477        
 478        if (x >= 0x10000) {
 479                x >>= 16;
 480                r += 16;
 481        }
 482        if (x >= 0x100) {
 483                x >>= 8;
 484                r += 8;
 485        }
 486        if (x >= 0x10) {
 487                x >>= 4;
 488                r += 4;
 489        }
 490        if (x >= 4) {
 491                x >>= 2;
 492                r += 2;
 493        }
 494        if (x >= 2)
 495                r++;
 496        return r;
 497}
 498
 499/* --------------------------------------------------------------------- */
 500
 501/*
 502 * OSS compatible ring buffer management. The ring buffer may be mmap'ed into
 503 * an application address space.
 504 *
 505 * I first used the rvmalloc stuff copied from bttv. Alan Cox did not like it, so
 506 * we now use an array of pointers to a single page each. This saves us the
 507 * kernel page table manipulations, but we have to do a page table alike mechanism
 508 * (though only one indirection) in software.
 509 */
 510
 511static void dmabuf_release(struct dmabuf *db)
 512{
 513        unsigned int nr;
 514        void *p;
 515
 516        for(nr = 0; nr < NRSGBUF; nr++) {
 517                if (!(p = db->sgbuf[nr]))
 518                        continue;
 519                mem_map_unreserve(virt_to_page(p));
 520                free_page((unsigned long)p);
 521                db->sgbuf[nr] = NULL;
 522        }
 523        db->mapped = db->ready = 0;
 524}
 525
 526static int dmabuf_init(struct dmabuf *db)
 527{
 528        unsigned int nr, bytepersec, bufs;
 529        void *p;
 530
 531        /* initialize some fields */
 532        db->rdptr = db->wrptr = db->total_bytes = db->count = db->error = 0;
 533        /* calculate required buffer size */
 534        bytepersec = db->srate * AFMT_SAMPLEBYTES(db->format);
 535        bufs = 1U << DMABUFSHIFT;
 536        if (db->ossfragshift) {
 537                if ((1000 << db->ossfragshift) < bytepersec)
 538                        db->fragshift = ld2(bytepersec/1000);
 539                else
 540                        db->fragshift = db->ossfragshift;
 541        } else {
 542                db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
 543                if (db->fragshift < 3)
 544                        db->fragshift = 3;
 545        }
 546        db->numfrag = bufs >> db->fragshift;
 547        while (db->numfrag < 4 && db->fragshift > 3) {
 548                db->fragshift--;
 549                db->numfrag = bufs >> db->fragshift;
 550        }
 551        db->fragsize = 1 << db->fragshift;
 552        if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
 553                db->numfrag = db->ossmaxfrags;
 554        db->dmasize = db->numfrag << db->fragshift;
 555        for(nr = 0; nr < NRSGBUF; nr++) {
 556                if (!db->sgbuf[nr]) {
 557                        p = (void *)get_free_page(GFP_KERNEL);
 558                        if (!p)
 559                                return -ENOMEM;
 560                        db->sgbuf[nr] = p;
 561                        mem_map_reserve(virt_to_page(p));
 562                }
 563                memset(db->sgbuf[nr], AFMT_SIGN(db->format) ? 0 : 0x80, PAGE_SIZE);
 564                if ((nr << PAGE_SHIFT) >= db->dmasize)
 565                        break;
 566        }
 567        db->bufsize = nr << PAGE_SHIFT;
 568        db->enabled = 1;
 569        db->ready = 1;
 570        dprintk((KERN_DEBUG "usbaudio: dmabuf_init bytepersec %d bufs %d ossfragshift %d ossmaxfrags %d "
 571                 "fragshift %d fragsize %d numfrag %d dmasize %d bufsize %d fmt 0x%x srate %d\n",
 572                 bytepersec, bufs, db->ossfragshift, db->ossmaxfrags, db->fragshift, db->fragsize,
 573                 db->numfrag, db->dmasize, db->bufsize, db->format, db->srate));
 574        return 0;
 575}
 576
 577static int dmabuf_mmap(struct dmabuf *db, unsigned long start, unsigned long size, pgprot_t prot)
 578{
 579        unsigned int nr;
 580
 581        if (!db->ready || db->mapped || (start | size) & (PAGE_SIZE-1) || size > db->bufsize)
 582                return -EINVAL;
 583        size >>= PAGE_SHIFT;
 584        for(nr = 0; nr < size; nr++)
 585                if (!db->sgbuf[nr])
 586                        return -EINVAL;
 587        db->mapped = 1;
 588        for(nr = 0; nr < size; nr++) {
 589                if (remap_page_range(start, virt_to_phys(db->sgbuf[nr]), PAGE_SIZE, prot))
 590                        return -EAGAIN;
 591                start += PAGE_SIZE;
 592        }
 593        return 0;
 594}
 595
 596static void dmabuf_copyin(struct dmabuf *db, const void *_buffer, unsigned int size)
 597{
 598        unsigned int pgrem, rem;
 599        const char *buffer = _buffer;
 600
 601        db->total_bytes += size;
 602        for (;;) {
 603                if (size <= 0)
 604                        return;
 605                pgrem = ((~db->wrptr) & (PAGE_SIZE-1)) + 1;
 606                if (pgrem > size)
 607                        pgrem = size;
 608                rem = db->dmasize - db->wrptr;
 609                if (pgrem > rem)
 610                        pgrem = rem;
 611                memcpy((db->sgbuf[db->wrptr >> PAGE_SHIFT]) + (db->wrptr & (PAGE_SIZE-1)), buffer, pgrem);
 612                size -= pgrem;
 613                buffer += pgrem;
 614                db->wrptr += pgrem;
 615                if (db->wrptr >= db->dmasize)
 616                        db->wrptr = 0;
 617        }
 618}
 619
 620static void dmabuf_copyout(struct dmabuf *db, void *_buffer, unsigned int size)
 621{
 622        unsigned int pgrem, rem;
 623        char *buffer = _buffer;
 624
 625        db->total_bytes += size;
 626        for (;;) {
 627                if (size <= 0)
 628                        return;
 629                pgrem = ((~db->rdptr) & (PAGE_SIZE-1)) + 1;
 630                if (pgrem > size)
 631                        pgrem = size;
 632                rem = db->dmasize - db->rdptr;
 633                if (pgrem > rem)
 634                        pgrem = rem;
 635                memcpy(buffer, (db->sgbuf[db->rdptr >> PAGE_SHIFT]) + (db->rdptr & (PAGE_SIZE-1)), pgrem);
 636                size -= pgrem;
 637                buffer += pgrem;
 638                db->rdptr += pgrem;
 639                if (db->rdptr >= db->dmasize)
 640                        db->rdptr = 0;
 641        }
 642}
 643
 644static int dmabuf_copyin_user(struct dmabuf *db, unsigned int ptr, const void *_buffer, unsigned int size)
 645{
 646        unsigned int pgrem, rem;
 647        const char *buffer = _buffer;
 648
 649        if (!db->ready || db->mapped)
 650                return -EINVAL;
 651        for (;;) {
 652                if (size <= 0)
 653                        return 0;
 654                pgrem = ((~ptr) & (PAGE_SIZE-1)) + 1;
 655                if (pgrem > size)
 656                        pgrem = size;
 657                rem = db->dmasize - ptr;
 658                if (pgrem > rem)
 659                        pgrem = rem;
 660                if (copy_from_user((db->sgbuf[ptr >> PAGE_SHIFT]) + (ptr & (PAGE_SIZE-1)), buffer, pgrem))
 661                        return -EFAULT;
 662                size -= pgrem;
 663                buffer += pgrem;
 664                ptr += pgrem;
 665                if (ptr >= db->dmasize)
 666                        ptr = 0;
 667        }
 668}
 669
 670static int dmabuf_copyout_user(struct dmabuf *db, unsigned int ptr, void *_buffer, unsigned int size)
 671{
 672        unsigned int pgrem, rem;
 673        char *buffer = _buffer;
 674
 675        if (!db->ready || db->mapped)
 676                return -EINVAL;
 677        for (;;) {
 678                if (size <= 0)
 679                        return 0;
 680                pgrem = ((~ptr) & (PAGE_SIZE-1)) + 1;
 681                if (pgrem > size)
 682                        pgrem = size;
 683                rem = db->dmasize - ptr;
 684                if (pgrem > rem)
 685                        pgrem = rem;
 686                if (copy_to_user(buffer, (db->sgbuf[ptr >> PAGE_SHIFT]) + (ptr & (PAGE_SIZE-1)), pgrem))
 687                        return -EFAULT;
 688                size -= pgrem;
 689                buffer += pgrem;
 690                ptr += pgrem;
 691                if (ptr >= db->dmasize)
 692                        ptr = 0;
 693        }
 694}
 695
 696/* --------------------------------------------------------------------- */
 697/*
 698 * USB I/O code. We do sample format conversion if necessary
 699 */
 700
 701static void usbin_stop(struct usb_audiodev *as)
 702{
 703        struct usbin *u = &as->usbin;
 704        unsigned long flags;
 705        unsigned int i, notkilled = 1;
 706
 707        spin_lock_irqsave(&as->lock, flags);
 708        u->flags &= ~FLG_RUNNING;
 709        i = u->flags;
 710        spin_unlock_irqrestore(&as->lock, flags);
 711        while (i & (FLG_URB0RUNNING|FLG_URB1RUNNING|FLG_SYNC0RUNNING|FLG_SYNC1RUNNING)) {
 712                set_current_state(notkilled ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
 713                schedule_timeout(1);
 714                spin_lock_irqsave(&as->lock, flags);
 715                i = u->flags;
 716                spin_unlock_irqrestore(&as->lock, flags);
 717                if (notkilled && signal_pending(current)) {
 718                        if (i & FLG_URB0RUNNING)
 719                                usb_unlink_urb(&u->durb[0].urb);
 720                        if (i & FLG_URB1RUNNING)
 721                                usb_unlink_urb(&u->durb[1].urb);
 722                        if (i & FLG_SYNC0RUNNING)
 723                                usb_unlink_urb(&u->surb[0].urb);
 724                        if (i & FLG_SYNC1RUNNING)
 725                                usb_unlink_urb(&u->surb[1].urb);
 726                        notkilled = 0;
 727                }
 728        }
 729        set_current_state(TASK_RUNNING);
 730        if (u->durb[0].urb.transfer_buffer)
 731                kfree(u->durb[0].urb.transfer_buffer);
 732        if (u->durb[1].urb.transfer_buffer)
 733                kfree(u->durb[1].urb.transfer_buffer);
 734        if (u->surb[0].urb.transfer_buffer)
 735                kfree(u->surb[0].urb.transfer_buffer);
 736        if (u->surb[1].urb.transfer_buffer)
 737                kfree(u->surb[1].urb.transfer_buffer);
 738        u->durb[0].urb.transfer_buffer = u->durb[1].urb.transfer_buffer = 
 739                u->surb[0].urb.transfer_buffer = u->surb[1].urb.transfer_buffer = NULL;
 740}
 741
 742static inline void usbin_release(struct usb_audiodev *as)
 743{
 744        usbin_stop(as);
 745}
 746
 747static void usbin_disc(struct usb_audiodev *as)
 748{
 749        struct usbin *u = &as->usbin;
 750
 751        unsigned long flags;
 752
 753        spin_lock_irqsave(&as->lock, flags);
 754        u->flags &= ~(FLG_RUNNING | FLG_CONNECTED);
 755        spin_unlock_irqrestore(&as->lock, flags);
 756        usbin_stop(as);
 757}
 758
 759static inline int iconvert(unsigned char **xx,int jump)
 760{
 761  int value=0;
 762  unsigned char *x=*xx;
 763                        
 764  /* conversion fall-through cascade compiles to a jump table */
 765  switch(jump){
 766  case 0:
 767    /* 32 bit BE */
 768    value  = x[3];
 769  case 1:
 770    /* 24 bit BE */
 771    value |= x[2] << 8;
 772  case 2:
 773    /* 16 bit BE */
 774    value |= x[1] << 16;
 775  case 3:
 776    /* 8 bit */
 777    value |= x[0] << 24;
 778    x+=(4-jump);
 779    break;
 780
 781  case 4:
 782    /* 32 bit LE */
 783    value  = *x++;
 784  case 5:
 785    /* 24 bit LE */
 786    value |= *x++ << 8;
 787  case 6:
 788    /* 16 bit LE */
 789    value |= *x++ << 16;
 790    value |= *x++ << 24;
 791    break;
 792  }
 793  *xx=x;
 794  return(value);
 795}
 796
 797static inline void oconvert(unsigned char **yy,int jump,int value)
 798{
 799  unsigned char *y=*yy;
 800
 801  /* conversion fall-through cascade compiles to a jump table */
 802  switch(jump){
 803  case 0:
 804    /* 32 bit BE */
 805    y[3] = value;
 806  case 1:
 807    /* 24 bit BE */
 808    y[2] = value >> 8;
 809  case 2:
 810    /* 16 bit BE */
 811    y[1] = value >> 16;
 812  case 3:
 813    /* 8 bit */
 814    y[0] = value >> 24;
 815    y+=(4-jump);
 816    break;
 817
 818  case 4:
 819    /* 32 bit LE */
 820    *y++ = value;
 821  case 5:
 822    /* 24 bit LE */
 823    *y++ = value >> 8;
 824  case 6:
 825    /* 16 bit LE */
 826    *y++ = value >> 16;
 827    *y++ = value >> 24;
 828    break;
 829  }
 830  *yy=y;
 831}
 832
 833/* capable of any-to-any conversion */
 834static void conversion(const void *ibuf, unsigned int ifmt, 
 835                       void *obuf, unsigned int ofmt, unsigned int scnt)
 836{
 837
 838  /* some conversion is indeed needed */
 839  unsigned int i,j;
 840  unsigned char *x=(unsigned char *)ibuf;
 841  unsigned char *y=(unsigned char *)obuf;
 842
 843  int ichannels = AFMT_CHANNELS(ifmt);
 844  int ochannels = AFMT_CHANNELS(ofmt);
 845  int ibytes    = AFMT_BYTES(ifmt);
 846  int obytes    = AFMT_BYTES(ofmt);
 847  int iendian   = AFMT_ENDIAN(ifmt);
 848  int oendian   = AFMT_ENDIAN(ofmt);
 849  int isign     = AFMT_SIGN(ifmt)?0:0x80000000UL;
 850  int osign     = AFMT_SIGN(ofmt)?0:0x80000000UL;
 851  int sign      = (isign==osign?0:0x80000000UL);
 852  
 853  /* build the byte/endian jump table offsets */
 854  int ijump = (iendian ? 4-ibytes : 8-ibytes);
 855  int ojump = (oendian ? 4-obytes : 8-obytes);
 856  
 857  if(ichannels == 2 && ochannels == 1){
 858    /* Stereo -> mono is a special case loop; we downmix */
 859    for(i=0;i<scnt;i++){
 860      int valueL = iconvert(&x,ijump) ^ isign; /* side effect; increments x */
 861      int valueR = iconvert(&x,ijump) ^ isign; /* side effect; increments x */
 862      int value  = (valueL>>1) + (valueR>>1);
 863      oconvert(&y,ojump,value^osign);  /* side effect; increments y */
 864                }
 865    return;
 866                }
 867  if(ichannels == 1 && ochannels == 2){
 868    /* mono->stereo is a special case loop; we replicate */
 869    for(i=0;i<scnt;i++){
 870      int value = iconvert(&x,ijump) ^ sign; /* side effect; increments x */
 871      oconvert(&y,ojump,value);  /* side effect; increments y */
 872      oconvert(&y,ojump,value);  /* side effect; increments y */
 873        }
 874    return;
 875                }
 876  if(ichannels<ochannels){
 877    /* zero out extra output channels */
 878    for(i=0;i<scnt;i++){
 879      for(j=0;j<ichannels;j++){
 880        int value = iconvert(&x,ijump) ^ sign; /* side effect; increments x */
 881        oconvert(&y,ojump,value);  /* side effect; increments y */
 882        
 883        }
 884      for(;j<ochannels;j++){
 885        oconvert(&y,ojump,osign);  /* side effect; increments y */
 886        }
 887                }
 888    return;
 889                }
 890  if(ichannels>=ochannels){
 891    /* discard extra input channels */
 892    int xincrement=ibytes*(ichannels-ochannels);
 893    for(i=0;i<scnt;i++){
 894      for(j=0;j<ichannels;j++){
 895        int value = iconvert(&x,ijump) ^ sign; /* side effect; increments x */
 896        oconvert(&y,ojump,value);  /* side effect; increments y */
 897
 898                }
 899      x+=xincrement;
 900                }
 901    return;
 902        }
 903}
 904
 905static void usbin_convert(struct usbin *u, unsigned char *buffer, unsigned int samples)
 906{
 907        unsigned int scnt;
 908        unsigned int ufmtb = AFMT_SAMPLEBYTES(u->format);
 909        unsigned int dfmtb = AFMT_SAMPLEBYTES(u->dma.format);
 910        unsigned char tmp[TMPCOPYWIDTH];
 911        unsigned int maxs  = sizeof(tmp)/dfmtb;
 912
 913        while (samples > 0) {
 914                scnt = samples;
 915                if (scnt > maxs)
 916                        scnt = maxs;
 917
 918                conversion(buffer, u->format, tmp, u->dma.format, scnt);
 919                dmabuf_copyin(&u->dma, tmp, scnt * dfmtb);
 920                buffer += scnt * ufmtb;
 921                samples -= scnt;
 922        }
 923}               
 924
 925static int usbin_prepare_desc(struct usbin *u, struct urb *urb)
 926{
 927        unsigned int i, maxsize, offs;
 928
 929        maxsize = ((u->freqmax + 0x3fff) * AFMT_SAMPLEBYTES(u->format)) >> 14;
 930        //printk(KERN_DEBUG "usbin_prepare_desc: maxsize %d freq 0x%x format 0x%x\n", maxsize, u->freqn, u->format);
 931        for (i = offs = 0; i < DESCFRAMES; i++, offs += maxsize) {
 932                urb->iso_frame_desc[i].length = maxsize;
 933                urb->iso_frame_desc[i].offset = offs;
 934        }
 935        return 0;
 936}
 937
 938/*
 939 * return value: 0 if descriptor should be restarted, -1 otherwise
 940 * convert sample format on the fly if necessary
 941 */
 942static int usbin_retire_desc(struct usbin *u, struct urb *urb)
 943{
 944        unsigned int i, ufmtb, dfmtb, err = 0, cnt, scnt, dmafree;
 945        unsigned char *cp;
 946
 947        ufmtb = AFMT_SAMPLEBYTES(u->format);
 948        dfmtb = AFMT_SAMPLEBYTES(u->dma.format);
 949        for (i = 0; i < DESCFRAMES; i++) {
 950                cp = ((unsigned char *)urb->transfer_buffer) + urb->iso_frame_desc[i].offset;
 951                if (urb->iso_frame_desc[i].status) {
 952                        dprintk((KERN_DEBUG "usbin_retire_desc: frame %u status %d\n", i, urb->iso_frame_desc[i].status));
 953                        continue;
 954                }
 955                scnt = urb->iso_frame_desc[i].actual_length / ufmtb;
 956                if (!scnt)
 957                        continue;
 958                cnt = scnt * dfmtb;
 959                if (!u->dma.mapped) {
 960                        dmafree = u->dma.dmasize - u->dma.count;
 961                        if (cnt > dmafree) {
 962                                scnt = dmafree / dfmtb;
 963                                cnt = scnt * dfmtb;
 964                                err++;
 965                        }
 966                }
 967                u->dma.count += cnt;
 968                if (u->format == u->dma.format) {
 969                        /* we do not need format conversion */
 970                        dprintk((KERN_DEBUG "usbaudio: no sample format conversion\n"));
 971                        dmabuf_copyin(&u->dma, cp, cnt);
 972                } else {
 973                        /* we need sampling format conversion */
 974                        dprintk((KERN_DEBUG "usbaudio: sample format conversion %x != %x\n", u->format, u->dma.format));
 975                        usbin_convert(u, cp, scnt);
 976                }
 977        }
 978        if (err)
 979                u->dma.error++;
 980        if (u->dma.count >= (signed)u->dma.fragsize)
 981                wake_up(&u->dma.wait);
 982        return err ? -1 : 0;
 983}
 984
 985static void usbin_completed(struct urb *urb)
 986{
 987        struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
 988        struct usbin *u = &as->usbin;
 989        unsigned long flags;
 990        unsigned int mask;
 991        int suret = USB_ST_NOERROR;
 992
 993#if 0
 994        printk(KERN_DEBUG "usbin_completed: status %d errcnt %d flags 0x%x\n", urb->status, urb->error_count, u->flags);
 995#endif
 996        if (urb == &u->durb[0].urb)
 997                mask = FLG_URB0RUNNING;
 998        else if (urb == &u->durb[1].urb)
 999                mask = FLG_URB1RUNNING;
1000        else {
1001                mask = 0;
1002                printk(KERN_ERR "usbin_completed: panic: unknown URB\n");
1003        }
1004        urb->dev = as->state->usbdev;
1005        spin_lock_irqsave(&as->lock, flags);
1006        if (!usbin_retire_desc(u, urb) &&
1007            u->flags & FLG_RUNNING &&
1008            !usbin_prepare_desc(u, urb) && 
1009            (suret = usb_submit_urb(urb)) == USB_ST_NOERROR) {
1010                u->flags |= mask;
1011        } else {
1012                u->flags &= ~(mask | FLG_RUNNING);
1013                wake_up(&u->dma.wait);
1014                printk(KERN_DEBUG "usbin_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret);
1015        }
1016        spin_unlock_irqrestore(&as->lock, flags);
1017}
1018
1019/*
1020 * we output sync data
1021 */
1022static int usbin_sync_prepare_desc(struct usbin *u, struct urb *urb)
1023{
1024        unsigned char *cp = urb->transfer_buffer;
1025        unsigned int i, offs;
1026        
1027        for (i = offs = 0; i < SYNCFRAMES; i++, offs += 3, cp += 3) {
1028                urb->iso_frame_desc[i].length = 3;
1029                urb->iso_frame_desc[i].offset = offs;
1030                cp[0] = u->freqn;
1031                cp[1] = u->freqn >> 8;
1032                cp[2] = u->freqn >> 16;
1033        }
1034        return 0;
1035}
1036
1037/*
1038 * return value: 0 if descriptor should be restarted, -1 otherwise
1039 */
1040static int usbin_sync_retire_desc(struct usbin *u, struct urb *urb)
1041{
1042        unsigned int i;
1043        
1044        for (i = 0; i < SYNCFRAMES; i++)
1045                if (urb->iso_frame_desc[0].status)
1046                        dprintk((KERN_DEBUG "usbin_sync_retire_desc: frame %u status %d\n", i, urb->iso_frame_desc[i].status));
1047        return 0;
1048}
1049
1050static void usbin_sync_completed(struct urb *urb)
1051{
1052        struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
1053        struct usbin *u = &as->usbin;
1054        unsigned long flags;
1055        unsigned int mask;
1056        int suret = USB_ST_NOERROR;
1057
1058#if 0
1059        printk(KERN_DEBUG "usbin_sync_completed: status %d errcnt %d flags 0x%x\n", urb->status, urb->error_count, u->flags);
1060#endif
1061        if (urb == &u->surb[0].urb)
1062                mask = FLG_SYNC0RUNNING;
1063        else if (urb == &u->surb[1].urb)
1064                mask = FLG_SYNC1RUNNING;
1065        else {
1066                mask = 0;
1067                printk(KERN_ERR "usbin_sync_completed: panic: unknown URB\n");
1068        }
1069        urb->dev = as->state->usbdev;
1070        spin_lock_irqsave(&as->lock, flags);
1071        if (!usbin_sync_retire_desc(u, urb) &&
1072            u->flags & FLG_RUNNING &&
1073            !usbin_sync_prepare_desc(u, urb) && 
1074            (suret = usb_submit_urb(urb)) == USB_ST_NOERROR) {
1075                u->flags |= mask;
1076        } else {
1077                u->flags &= ~(mask | FLG_RUNNING);
1078                wake_up(&u->dma.wait);
1079                dprintk((KERN_DEBUG "usbin_sync_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret));
1080        }
1081        spin_unlock_irqrestore(&as->lock, flags);
1082}
1083
1084static int usbin_start(struct usb_audiodev *as)
1085{
1086        struct usb_device *dev = as->state->usbdev;
1087        struct usbin *u = &as->usbin;
1088        struct urb *urb;
1089        unsigned long flags;
1090        unsigned int maxsze, bufsz;
1091
1092#if 0
1093        printk(KERN_DEBUG "usbin_start: device %d ufmt 0x%08x dfmt 0x%08x srate %d\n",
1094               dev->devnum, u->format, u->dma.format, u->dma.srate);
1095#endif
1096        /* allocate USB storage if not already done */
1097        spin_lock_irqsave(&as->lock, flags);
1098        if (!(u->flags & FLG_CONNECTED)) {
1099                spin_unlock_irqrestore(&as->lock, flags);
1100                return -EIO;
1101        }
1102        if (!(u->flags & FLG_RUNNING)) {
1103                spin_unlock_irqrestore(&as->lock, flags);
1104                u->freqn = ((u->dma.srate << 11) + 62) / 125; /* this will overflow at approx 2MSPS */
1105                u->freqmax = u->freqn + (u->freqn >> 2);
1106                u->phase = 0;
1107                maxsze = ((u->freqmax + 0x3fff) * AFMT_SAMPLEBYTES(u->format)) >> 14;
1108                bufsz = DESCFRAMES * maxsze;
1109                if (u->durb[0].urb.transfer_buffer)
1110                        kfree(u->durb[0].urb.transfer_buffer);
1111                u->durb[0].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
1112                u->durb[0].urb.transfer_buffer_length = bufsz;
1113                if (u->durb[1].urb.transfer_buffer)
1114                        kfree(u->durb[1].urb.transfer_buffer);
1115                u->durb[1].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
1116                u->durb[1].urb.transfer_buffer_length = bufsz;
1117                if (u->syncpipe) {
1118                        if (u->surb[0].urb.transfer_buffer)
1119                                kfree(u->surb[0].urb.transfer_buffer);
1120                        u->surb[0].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
1121                        u->surb[0].urb.transfer_buffer_length = 3*SYNCFRAMES;
1122                        if (u->surb[1].urb.transfer_buffer)
1123                                kfree(u->surb[1].urb.transfer_buffer);
1124                        u->surb[1].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
1125                        u->surb[1].urb.transfer_buffer_length = 3*SYNCFRAMES;
1126                }
1127                if (!u->durb[0].urb.transfer_buffer || !u->durb[1].urb.transfer_buffer || 
1128                    (u->syncpipe && (!u->surb[0].urb.transfer_buffer || !u->surb[1].urb.transfer_buffer))) {
1129                        printk(KERN_ERR "usbaudio: cannot start playback device %d\n", dev->devnum);
1130                        return 0;
1131                }
1132                spin_lock_irqsave(&as->lock, flags);
1133        }
1134        if (u->dma.count >= u->dma.dmasize && !u->dma.mapped) {
1135                spin_unlock_irqrestore(&as->lock, flags);
1136                return 0;
1137        }
1138        u->flags |= FLG_RUNNING;
1139        if (!(u->flags & FLG_URB0RUNNING)) {
1140                urb = &u->durb[0].urb;
1141                urb->dev = dev;
1142                urb->pipe = u->datapipe;
1143                urb->transfer_flags = USB_ISO_ASAP;
1144                urb->number_of_packets = DESCFRAMES;
1145                urb->context = as;
1146                urb->complete = usbin_completed;
1147                if (!usbin_prepare_desc(u, urb) && !usb_submit_urb(urb))
1148                        u->flags |= FLG_URB0RUNNING;
1149                else
1150                        u->flags &= ~FLG_RUNNING;
1151        }
1152        if (u->flags & FLG_RUNNING && !(u->flags & FLG_URB1RUNNING)) {
1153                urb = &u->durb[1].urb;
1154                urb->dev = dev;
1155                urb->pipe = u->datapipe;
1156                urb->transfer_flags = USB_ISO_ASAP;
1157                urb->number_of_packets = DESCFRAMES;
1158                urb->context = as;
1159                urb->complete = usbin_completed;
1160                if (!usbin_prepare_desc(u, urb) && !usb_submit_urb(urb))
1161                        u->flags |= FLG_URB1RUNNING;
1162                else
1163                        u->flags &= ~FLG_RUNNING;
1164        }
1165        if (u->syncpipe) {
1166                if (u->flags & FLG_RUNNING && !(u->flags & FLG_SYNC0RUNNING)) {
1167                        urb = &u->surb[0].urb;
1168                        urb->dev = dev;
1169                        urb->pipe = u->syncpipe;
1170                        urb->transfer_flags = USB_ISO_ASAP;
1171                        urb->number_of_packets = SYNCFRAMES;
1172                        urb->context = as;
1173                        urb->complete = usbin_sync_completed;
1174                        /* stride: u->syncinterval */
1175                        if (!usbin_sync_prepare_desc(u, urb) && !usb_submit_urb(urb))
1176                                u->flags |= FLG_SYNC0RUNNING;
1177                        else
1178                                u->flags &= ~FLG_RUNNING;
1179                }
1180                if (u->flags & FLG_RUNNING && !(u->flags & FLG_SYNC1RUNNING)) {
1181                        urb = &u->surb[1].urb;
1182                        urb->dev = dev;
1183                        urb->pipe = u->syncpipe;
1184                        urb->transfer_flags = USB_ISO_ASAP;
1185                        urb->number_of_packets = SYNCFRAMES;
1186                        urb->context = as;
1187                        urb->complete = usbin_sync_completed;
1188                        /* stride: u->syncinterval */
1189                        if (!usbin_sync_prepare_desc(u, urb) && !usb_submit_urb(urb))
1190                                u->flags |= FLG_SYNC1RUNNING;
1191                        else
1192                                u->flags &= ~FLG_RUNNING;
1193                }
1194        }
1195        spin_unlock_irqrestore(&as->lock, flags);
1196        return 0;
1197}
1198
1199static void usbout_stop(struct usb_audiodev *as)
1200{
1201        struct usbout *u = &as->usbout;
1202        unsigned long flags;
1203        unsigned int i, notkilled = 1;
1204
1205        spin_lock_irqsave(&as->lock, flags);
1206        u->flags &= ~FLG_RUNNING;
1207        i = u->flags;
1208        spin_unlock_irqrestore(&as->lock, flags);
1209        while (i & (FLG_URB0RUNNING|FLG_URB1RUNNING|FLG_SYNC0RUNNING|FLG_SYNC1RUNNING)) {
1210                set_current_state(notkilled ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
1211                schedule_timeout(1);
1212                spin_lock_irqsave(&as->lock, flags);
1213                i = u->flags;
1214                spin_unlock_irqrestore(&as->lock, flags);
1215                if (notkilled && signal_pending(current)) {
1216                        if (i & FLG_URB0RUNNING)
1217                                usb_unlink_urb(&u->durb[0].urb);
1218                        if (i & FLG_URB1RUNNING)
1219                                usb_unlink_urb(&u->durb[1].urb);
1220                        if (i & FLG_SYNC0RUNNING)
1221                                usb_unlink_urb(&u->surb[0].urb);
1222                        if (i & FLG_SYNC1RUNNING)
1223                                usb_unlink_urb(&u->surb[1].urb);
1224                        notkilled = 0;
1225                }
1226        }
1227        set_current_state(TASK_RUNNING);
1228        if (u->durb[0].urb.transfer_buffer)
1229                kfree(u->durb[0].urb.transfer_buffer);
1230        if (u->durb[1].urb.transfer_buffer)
1231                kfree(u->durb[1].urb.transfer_buffer);
1232        if (u->surb[0].urb.transfer_buffer)
1233                kfree(u->surb[0].urb.transfer_buffer);
1234        if (u->surb[1].urb.transfer_buffer)
1235                kfree(u->surb[1].urb.transfer_buffer);
1236        u->durb[0].urb.transfer_buffer = u->durb[1].urb.transfer_buffer = 
1237                u->surb[0].urb.transfer_buffer = u->surb[1].urb.transfer_buffer = NULL;
1238}
1239
1240static inline void usbout_release(struct usb_audiodev *as)
1241{
1242        usbout_stop(as);
1243}
1244
1245static void usbout_disc(struct usb_audiodev *as)
1246{
1247        struct usbout *u = &as->usbout;
1248        unsigned long flags;
1249
1250        spin_lock_irqsave(&as->lock, flags);
1251        u->flags &= ~(FLG_RUNNING | FLG_CONNECTED);
1252        spin_unlock_irqrestore(&as->lock, flags);
1253        usbout_stop(as);
1254}
1255
1256static void usbout_convert(struct usbout *u, unsigned char *buffer, unsigned int samples)
1257{
1258        unsigned char tmp[TMPCOPYWIDTH];
1259        unsigned int scnt;
1260        unsigned int ufmtb = AFMT_SAMPLEBYTES(u->format);
1261        unsigned int dfmtb = AFMT_SAMPLEBYTES(u->dma.format);
1262        unsigned int maxs  = sizeof(tmp)/dfmtb;
1263        
1264        while (samples > 0) {
1265                scnt = samples;
1266                if (scnt > maxs)
1267                        scnt = maxs;
1268
1269                dmabuf_copyout(&u->dma, tmp, scnt * dfmtb);
1270                conversion(tmp, u->dma.format, buffer, u->format, scnt);
1271                buffer += scnt * ufmtb;
1272                samples -= scnt;
1273        }
1274}               
1275
1276static int usbout_prepare_desc(struct usbout *u, struct urb *urb)
1277{
1278        unsigned int i, ufmtb, dfmtb, err = 0, cnt, scnt, offs;
1279        unsigned char *cp = urb->transfer_buffer;
1280
1281        ufmtb = AFMT_SAMPLEBYTES(u->format);
1282        dfmtb = AFMT_SAMPLEBYTES(u->dma.format);
1283        for (i = offs = 0; i < DESCFRAMES; i++) {
1284                urb->iso_frame_desc[i].offset = offs;
1285                u->phase = (u->phase & 0x3fff) + u->freqm;
1286                scnt = u->phase >> 14;
1287                if (!scnt) {
1288                        urb->iso_frame_desc[i].length = 0;
1289                        continue;
1290                }
1291                cnt = scnt * dfmtb;
1292                if (!u->dma.mapped) {
1293                        if (cnt > u->dma.count) {
1294                                scnt = u->dma.count / dfmtb;
1295                                cnt = scnt * dfmtb;
1296                                err++;
1297                        }
1298                        u->dma.count -= cnt;
1299                } else
1300                        u->dma.count += cnt;
1301                if (u->format == u->dma.format) {
1302                        /* we do not need format conversion */
1303                        dmabuf_copyout(&u->dma, cp, cnt);
1304                } else {
1305                        /* we need sampling format conversion */
1306                        usbout_convert(u, cp, scnt);
1307                }
1308                cnt = scnt * ufmtb;
1309                urb->iso_frame_desc[i].length = cnt;
1310                offs += cnt;
1311                cp += cnt;
1312        }
1313        if (err)
1314                u->dma.error++;
1315        if (u->dma.mapped) {
1316                if (u->dma.count >= (signed)u->dma.fragsize)
1317                        wake_up(&u->dma.wait);
1318        } else {
1319                if ((signed)u->dma.dmasize >= u->dma.count + (signed)u->dma.fragsize)
1320                        wake_up(&u->dma.wait);
1321        }
1322        return err ? -1 : 0;
1323}
1324
1325/*
1326 * return value: 0 if descriptor should be restarted, -1 otherwise
1327 */
1328static int usbout_retire_desc(struct usbout *u, struct urb *urb)
1329{
1330        unsigned int i;
1331
1332        for (i = 0; i < DESCFRAMES; i++) {
1333                if (urb->iso_frame_desc[i].status) {
1334                        dprintk((KERN_DEBUG "usbout_retire_desc: frame %u status %d\n", i, urb->iso_frame_desc[i].status));
1335                        continue;
1336                }
1337        }
1338        return 0;
1339}
1340
1341static void usbout_completed(struct urb *urb)
1342{
1343        struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
1344        struct usbout *u = &as->usbout;
1345        unsigned long flags;
1346        unsigned int mask;
1347        int suret = USB_ST_NOERROR;
1348
1349#if 0
1350        printk(KERN_DEBUG "usbout_completed: status %d errcnt %d flags 0x%x\n", urb->status, urb->error_count, u->flags);
1351#endif
1352        if (urb == &u->durb[0].urb)
1353                mask = FLG_URB0RUNNING;
1354        else if (urb == &u->durb[1].urb)
1355                mask = FLG_URB1RUNNING;
1356        else {
1357                mask = 0;
1358                printk(KERN_ERR "usbout_completed: panic: unknown URB\n");
1359        }
1360        urb->dev = as->state->usbdev;
1361        spin_lock_irqsave(&as->lock, flags);
1362        if (!usbout_retire_desc(u, urb) &&
1363            u->flags & FLG_RUNNING &&
1364            !usbout_prepare_desc(u, urb) && 
1365            (suret = usb_submit_urb(urb)) == USB_ST_NOERROR) {
1366                u->flags |= mask;
1367        } else {
1368                u->flags &= ~(mask | FLG_RUNNING);
1369                wake_up(&u->dma.wait);
1370                dprintk((KERN_DEBUG "usbout_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret));
1371        }
1372        spin_unlock_irqrestore(&as->lock, flags);
1373}
1374
1375static int usbout_sync_prepare_desc(struct usbout *u, struct urb *urb)
1376{
1377        unsigned int i, offs;
1378
1379        for (i = offs = 0; i < SYNCFRAMES; i++, offs += 3) {
1380                urb->iso_frame_desc[i].length = 3;
1381                urb->iso_frame_desc[i].offset = offs;
1382        }
1383        return 0;
1384}
1385
1386/*
1387 * return value: 0 if descriptor should be restarted, -1 otherwise
1388 */
1389static int usbout_sync_retire_desc(struct usbout *u, struct urb *urb)
1390{
1391        unsigned char *cp = urb->transfer_buffer;
1392        unsigned int f, i;
1393
1394        for (i = 0; i < SYNCFRAMES; i++, cp += 3) {
1395                if (urb->iso_frame_desc[i].status) {
1396                        dprintk((KERN_DEBUG "usbout_sync_retire_desc: frame %u status %d\n", i, urb->iso_frame_desc[i].status));
1397                        continue;
1398                }
1399                if (urb->iso_frame_desc[i].actual_length < 3) {
1400                        dprintk((KERN_DEBUG "usbout_sync_retire_desc: frame %u length %d\n", i, urb->iso_frame_desc[i].actual_length));
1401                        continue;
1402                }
1403                f = cp[0] | (cp[1] << 8) | (cp[2] << 16);
1404                if (abs(f - u->freqn) > (u->freqn >> 3) || f > u->freqmax) {
1405                        printk(KERN_WARNING "usbout_sync_retire_desc: requested frequency %u (nominal %u) out of range!\n", f, u->freqn);
1406                        continue;
1407                }
1408                u->freqm = f;
1409        }
1410        return 0;
1411}
1412
1413static void usbout_sync_completed(struct urb *urb)
1414{
1415        struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
1416        struct usbout *u = &as->usbout;
1417        unsigned long flags;
1418        unsigned int mask;
1419        int suret = USB_ST_NOERROR;
1420
1421#if 0
1422        printk(KERN_DEBUG "usbout_sync_completed: status %d errcnt %d flags 0x%x\n", urb->status, urb->error_count, u->flags);
1423#endif
1424        if (urb == &u->surb[0].urb)
1425                mask = FLG_SYNC0RUNNING;
1426        else if (urb == &u->surb[1].urb)
1427                mask = FLG_SYNC1RUNNING;
1428        else {
1429                mask = 0;
1430                printk(KERN_ERR "usbout_sync_completed: panic: unknown URB\n");
1431        }
1432        urb->dev = as->state->usbdev;
1433        spin_lock_irqsave(&as->lock, flags);
1434        if (!usbout_sync_retire_desc(u, urb) &&
1435            u->flags & FLG_RUNNING &&
1436            !usbout_sync_prepare_desc(u, urb) && 
1437            (suret = usb_submit_urb(urb)) == USB_ST_NOERROR) {
1438                u->flags |= mask;
1439        } else {
1440                u->flags &= ~(mask | FLG_RUNNING);
1441                wake_up(&u->dma.wait);
1442                dprintk((KERN_DEBUG "usbout_sync_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret));
1443        }
1444        spin_unlock_irqrestore(&as->lock, flags);
1445}
1446
1447static int usbout_start(struct usb_audiodev *as)
1448{
1449        struct usb_device *dev = as->state->usbdev;
1450        struct usbout *u = &as->usbout;
1451        struct urb *urb;
1452        unsigned long flags;
1453        unsigned int maxsze, bufsz;
1454
1455#if 0
1456        printk(KERN_DEBUG "usbout_start: device %d ufmt 0x%08x dfmt 0x%08x srate %d\n",
1457               dev->devnum, u->format, u->dma.format, u->dma.srate);
1458#endif
1459        /* allocate USB storage if not already done */
1460        spin_lock_irqsave(&as->lock, flags);
1461        if (!(u->flags & FLG_CONNECTED)) {
1462                spin_unlock_irqrestore(&as->lock, flags);
1463                return -EIO;
1464        }
1465        if (!(u->flags & FLG_RUNNING)) {
1466                spin_unlock_irqrestore(&as->lock, flags);
1467                u->freqn = u->freqm = ((u->dma.srate << 11) + 62) / 125; /* this will overflow at approx 2MSPS */
1468                u->freqmax = u->freqn + (u->freqn >> 2);
1469                u->phase = 0;
1470                maxsze = ((u->freqmax + 0x3fff) * AFMT_SAMPLEBYTES(u->format)) >>14;
1471
1472                bufsz = DESCFRAMES * maxsze;
1473                if (u->durb[0].urb.transfer_buffer)
1474                        kfree(u->durb[0].urb.transfer_buffer);
1475                u->durb[0].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
1476                u->durb[0].urb.transfer_buffer_length = bufsz;
1477                if (u->durb[1].urb.transfer_buffer)
1478                        kfree(u->durb[1].urb.transfer_buffer);
1479                u->durb[1].urb.transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
1480                u->durb[1].urb.transfer_buffer_length = bufsz;
1481                if (u->syncpipe) {
1482                        if (u->surb[0].urb.transfer_buffer)
1483                                kfree(u->surb[0].urb.transfer_buffer);
1484                        u->surb[0].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
1485                        u->surb[0].urb.transfer_buffer_length = 3*SYNCFRAMES;
1486                        if (u->surb[1].urb.transfer_buffer)
1487                                kfree(u->surb[1].urb.transfer_buffer);
1488                        u->surb[1].urb.transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
1489                        u->surb[1].urb.transfer_buffer_length = 3*SYNCFRAMES;
1490                }
1491                if (!u->durb[0].urb.transfer_buffer || !u->durb[1].urb.transfer_buffer || 
1492                    (u->syncpipe && (!u->surb[0].urb.transfer_buffer || !u->surb[1].urb.transfer_buffer))) {
1493                        printk(KERN_ERR "usbaudio: cannot start playback device %d\n", dev->devnum);
1494                        return 0;
1495                }
1496                spin_lock_irqsave(&as->lock, flags);
1497        }
1498        if (u->dma.count <= 0 && !u->dma.mapped) {
1499                spin_unlock_irqrestore(&as->lock, flags);
1500                return 0;
1501        }
1502        u->flags |= FLG_RUNNING;
1503        if (!(u->flags & FLG_URB0RUNNING)) {
1504                urb = &u->durb[0].urb;
1505                urb->dev = dev;
1506                urb->pipe = u->datapipe;
1507                urb->transfer_flags = USB_ISO_ASAP;
1508                urb->number_of_packets = DESCFRAMES;
1509                urb->context = as;
1510                urb->complete = usbout_completed;
1511                if (!usbout_prepare_desc(u, urb) && !usb_submit_urb(urb))
1512                        u->flags |= FLG_URB0RUNNING;
1513                else
1514                        u->flags &= ~FLG_RUNNING;
1515        }
1516        if (u->flags & FLG_RUNNING && !(u->flags & FLG_URB1RUNNING)) {
1517                urb = &u->durb[1].urb;
1518                urb->dev = dev;
1519                urb->pipe = u->datapipe;
1520                urb->transfer_flags = USB_ISO_ASAP;
1521                urb->number_of_packets = DESCFRAMES;
1522                urb->context = as;
1523                urb->complete = usbout_completed;
1524                if (!usbout_prepare_desc(u, urb) && !usb_submit_urb(urb))
1525                        u->flags |= FLG_URB1RUNNING;
1526                else
1527                        u->flags &= ~FLG_RUNNING;
1528        }
1529        if (u->syncpipe) {
1530                if (u->flags & FLG_RUNNING && !(u->flags & FLG_SYNC0RUNNING)) {
1531                        urb = &u->surb[0].urb;
1532                        urb->dev = dev;
1533                        urb->pipe = u->syncpipe;
1534                        urb->transfer_flags = USB_ISO_ASAP;
1535                        urb->number_of_packets = SYNCFRAMES;
1536                        urb->context = as;
1537                        urb->complete = usbout_sync_completed;
1538                        /* stride: u->syncinterval */
1539                        if (!usbout_sync_prepare_desc(u, urb) && !usb_submit_urb(urb))
1540                                u->flags |= FLG_SYNC0RUNNING;
1541                        else
1542                                u->flags &= ~FLG_RUNNING;
1543                }
1544                if (u->flags & FLG_RUNNING && !(u->flags & FLG_SYNC1RUNNING)) {
1545                        urb = &u->surb[1].urb;
1546                        urb->dev = dev;
1547                        urb->pipe = u->syncpipe;
1548                        urb->transfer_flags = USB_ISO_ASAP;
1549                        urb->number_of_packets = SYNCFRAMES;
1550                        urb->context = as;
1551                        urb->complete = usbout_sync_completed;
1552                        /* stride: u->syncinterval */
1553                        if (!usbout_sync_prepare_desc(u, urb) && !usb_submit_urb(urb))
1554                                u->flags |= FLG_SYNC1RUNNING;
1555                        else
1556                                u->flags &= ~FLG_RUNNING;
1557                }
1558        }
1559        spin_unlock_irqrestore(&as->lock, flags);
1560        return 0;
1561}
1562
1563/* --------------------------------------------------------------------- */
1564/* allowed conversions (sign, endian, width, channels), and relative
1565   weighting penalties against fuzzy match selection.  For the
1566   purposes of not confusing users, 'lossy' format translation is
1567   disallowed, eg, don't allow a mono 8 bit device to successfully
1568   open as 5.1, 24 bit... Never allow a mode that tries to deliver greater
1569   than the hard capabilities of the device.
1570
1571   device --=> app
1572
1573   signed   => unsigned : 1
1574   unsigned => signed   : 1
1575
1576   le       => be       : 1
1577   be       => le       : 1
1578
1579   8        => 16       : not allowed
1580   8        => 24       : not allowed
1581   8        => 32       : not allowed
1582   16       => 24       : not allowed
1583   16       => 32       : not allowed
1584   24       => 32       : not allowed
1585
1586   16       => 8        : 4
1587   24       => 16       : 4
1588   24       => 8        : 5
1589   32       => 24       : 4
1590   32       => 16       : 5
1591   32       => 8        : 5
1592
1593   mono     => stereo   : not allowed
1594   stereo   => mono     : 32 (downmix to L+R/2)
1595
1596   N        => >N       : not allowed
1597   N        => <N       : 32 */
1598
1599static unsigned int format_goodness(struct audioformat *afp, unsigned int app,
1600                                    unsigned int srate){
1601        unsigned int g = 0;
1602        unsigned int sratelo=afp->sratelo;
1603        unsigned int sratehi=afp->sratehi;
1604        unsigned int dev=afp->format;
1605
1606        if(AFMT_SIGN(dev) && !AFMT_SIGN(app))     g += 1;
1607        if(!AFMT_SIGN(dev) && AFMT_SIGN(app))     g += 1;
1608        if(AFMT_ENDIAN(dev) && !AFMT_ENDIAN(app)) g += 1;
1609        if(!AFMT_ENDIAN(dev) && AFMT_ENDIAN(app)) g += 1;
1610
1611        switch(AFMT_BYTES(app)+AFMT_BYTES(dev)*10){
1612        case 12: return ~0;
1613        case 13: return ~0;
1614        case 14: return ~0;
1615        case 21: g += 4; break;
1616        case 23: return ~0;
1617        case 24: return ~0;
1618        case 31: g += 5; break;
1619        case 32: g += 4; break;
1620        case 34: return ~0;
1621        case 41: g += 6; break;
1622        case 42: g += 5; break;
1623        case 43: g += 4; break;
1624        }
1625
1626        if(AFMT_CHANNELS(dev) > AFMT_CHANNELS(app)){
1627                g+=32;
1628        }else if(AFMT_CHANNELS(dev) < AFMT_CHANNELS(app)){
1629                return ~0;
1630        }
1631          
1632        g<<=20;
1633
1634        if (srate < sratelo)
1635                g += sratelo - srate;
1636        if (srate > sratehi)
1637                g += srate - sratehi;
1638
1639        return(g);
1640}
1641
1642static int find_format(struct audioformat *afp, unsigned int nr, 
1643                          unsigned int fmt, unsigned int srate)
1644{
1645        unsigned int i, g, gb = ~0;
1646        int j = -1; /* default to failure */
1647
1648        /* find "best" format (according to format_goodness) */
1649        for (i = 0; i < nr; i++) {
1650                g = format_goodness(&afp[i], fmt, srate);
1651                if (g >= gb) continue;
1652                j = i;
1653                gb = g;
1654        }
1655        return j;
1656}
1657
1658static int set_format_in(struct usb_audiodev *as)
1659{
1660        struct usb_device *dev = as->state->usbdev;
1661        struct usb_config_descriptor *config = dev->actconfig;
1662        struct usb_interface_descriptor *alts;
1663        struct usb_interface *iface;
1664        struct usbin *u = &as->usbin;
1665        struct dmabuf *d = &u->dma;
1666        struct audioformat *fmt;
1667        unsigned int ep;
1668        unsigned char data[3];
1669        int fmtnr, ret;
1670
1671        if (u->interface < 0 || u->interface >= config->bNumInterfaces)
1672                return 0;
1673        iface = &config->interface[u->interface];
1674
1675        fmtnr = find_format(as->fmtin, as->numfmtin, d->format, d->srate);
1676        if (fmtnr < 0) {
1677                printk(KERN_ERR "usbaudio: set_format_in(): failed to find desired format/speed combination.\n");
1678                return -1;
1679        }
1680
1681        fmt = as->fmtin + fmtnr;
1682        alts = &iface->altsetting[fmt->altsetting];
1683        u->format = fmt->format;
1684        u->datapipe = usb_rcvisocpipe(dev, alts->endpoint[0].bEndpointAddress & 0xf);
1685        u->syncpipe = u->syncinterval = 0;
1686        if ((alts->endpoint[0].bmAttributes & 0x0c) == 0x08) {
1687                if (alts->bNumEndpoints < 2 ||
1688                    alts->endpoint[1].bmAttributes != 0x01 ||
1689                    alts->endpoint[1].bSynchAddress != 0 ||
1690                    alts->endpoint[1].bEndpointAddress != (alts->endpoint[0].bSynchAddress & 0x7f)) {
1691                        printk(KERN_WARNING "usbaudio: device %d interface %d altsetting %d claims adaptive in but has invalid synch pipe; treating as asynchronous in\n",
1692                               dev->devnum, u->interface, fmt->altsetting);
1693                } else {
1694                        u->syncpipe = usb_sndisocpipe(dev, alts->endpoint[1].bEndpointAddress & 0xf);
1695                        u->syncinterval = alts->endpoint[1].bRefresh;
1696                }
1697        }
1698        if (d->srate < fmt->sratelo)
1699                d->srate = fmt->sratelo;
1700        if (d->srate > fmt->sratehi)
1701                d->srate = fmt->sratehi;
1702        dprintk((KERN_DEBUG "usbaudio: set_format_in: usb_set_interface %u %u\n", alts->bInterfaceNumber, fmt->altsetting));
1703        if (usb_set_interface(dev, alts->bInterfaceNumber, fmt->altsetting) < 0) {
1704                printk(KERN_WARNING "usbaudio: usb_set_interface failed, device %d interface %d altsetting %d\n",
1705                       dev->devnum, u->interface, fmt->altsetting);
1706                return -1;
1707        }
1708        if (fmt->sratelo == fmt->sratehi)
1709                return 0;
1710        ep = usb_pipeendpoint(u->datapipe) | (u->datapipe & USB_DIR_IN);
1711        /* if endpoint has pitch control, enable it */
1712        if (fmt->attributes & 0x02) {
1713                data[0] = 1;
1714                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
1715                                           PITCH_CONTROL << 8, ep, data, 1, HZ)) < 0) {
1716                        printk(KERN_ERR "usbaudio: failure (error %d) to set output pitch control device %d interface %u endpoint 0x%x to %u\n",
1717                               ret, dev->devnum, u->interface, ep, d->srate);
1718                        return -1;
1719                }
1720        }
1721        /* if endpoint has sampling rate control, set it */
1722        if (fmt->attributes & 0x01) {
1723                data[0] = d->srate;
1724                data[1] = d->srate >> 8;
1725                data[2] = d->srate >> 16;
1726                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
1727                                           SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
1728                        printk(KERN_ERR "usbaudio: failure (error %d) to set input sampling frequency device %d interface %u endpoint 0x%x to %u\n",
1729                               ret, dev->devnum, u->interface, ep, d->srate);
1730                        return -1;
1731                }
1732                if ((ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN,
1733                                           SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
1734                        printk(KERN_ERR "usbaudio: failure (error %d) to get input sampling frequency device %d interface %u endpoint 0x%x\n",
1735                               ret, dev->devnum, u->interface, ep);
1736                        return -1;
1737                }
1738                dprintk((KERN_DEBUG "usbaudio: set_format_in: device %d interface %d altsetting %d srate req: %u real %u\n",
1739                        dev->devnum, u->interface, fmt->altsetting, d->srate, data[0] | (data[1] << 8) | (data[2] << 16)));
1740                d->srate = data[0] | (data[1] << 8) | (data[2] << 16);
1741        }
1742        dprintk((KERN_DEBUG "usbaudio: set_format_in: USB format 0x%x, DMA format 0x%x srate %u\n", u->format, d->format, d->srate));
1743        return 0;
1744}
1745
1746static int set_format_out(struct usb_audiodev *as)
1747{
1748        struct usb_device *dev = as->state->usbdev;
1749        struct usb_config_descriptor *config = dev->actconfig;
1750        struct usb_interface_descriptor *alts;
1751        struct usb_interface *iface;    
1752        struct usbout *u = &as->usbout;
1753        struct dmabuf *d = &u->dma;
1754        struct audioformat *fmt;
1755        unsigned int ep;
1756        unsigned char data[3];
1757        int fmtnr, ret;
1758
1759        if (u->interface < 0 || u->interface >= config->bNumInterfaces)
1760                return 0;
1761        iface = &config->interface[u->interface];
1762
1763        fmtnr = find_format(as->fmtout, as->numfmtout, d->format, d->srate);
1764        if (fmtnr < 0) {
1765                printk(KERN_ERR "usbaudio: set_format_out(): failed to find desired format/speed combination.\n");
1766                return -1;
1767        }
1768
1769        fmt = as->fmtout + fmtnr;
1770        u->format = fmt->format;
1771        alts = &iface->altsetting[fmt->altsetting];
1772        u->datapipe = usb_sndisocpipe(dev, alts->endpoint[0].bEndpointAddress & 0xf);
1773        u->syncpipe = u->syncinterval = 0;
1774        if ((alts->endpoint[0].bmAttributes & 0x0c) == 0x04) {
1775#if 0
1776                printk(KERN_DEBUG "bNumEndpoints 0x%02x endpoint[1].bmAttributes 0x%02x\n"
1777                       KERN_DEBUG "endpoint[1].bSynchAddress 0x%02x endpoint[1].bEndpointAddress 0x%02x\n"
1778                       KERN_DEBUG "endpoint[0].bSynchAddress 0x%02x\n", alts->bNumEndpoints,
1779                       alts->endpoint[1].bmAttributes, alts->endpoint[1].bSynchAddress,
1780                       alts->endpoint[1].bEndpointAddress, alts->endpoint[0].bSynchAddress);
1781#endif
1782                if (alts->bNumEndpoints < 2 ||
1783                    alts->endpoint[1].bmAttributes != 0x01 ||
1784                    alts->endpoint[1].bSynchAddress != 0 ||
1785                    alts->endpoint[1].bEndpointAddress != (alts->endpoint[0].bSynchAddress | 0x80)) {
1786                        printk(KERN_WARNING "usbaudio: device %d interface %d altsetting %d claims asynch out but has invalid synch pipe; treating as adaptive out\n",
1787                               dev->devnum, u->interface, fmt->altsetting);
1788                } else {
1789                        u->syncpipe = usb_rcvisocpipe(dev, alts->endpoint[1].bEndpointAddress & 0xf);
1790                        u->syncinterval = alts->endpoint[1].bRefresh;
1791                }
1792        }
1793        if (d->srate < fmt->sratelo)
1794                d->srate = fmt->sratelo;
1795        if (d->srate > fmt->sratehi)
1796                d->srate = fmt->sratehi;
1797        dprintk((KERN_DEBUG "usbaudio: set_format_out: usb_set_interface %u %u\n", alts->bInterfaceNumber, fmt->altsetting));
1798        if (usb_set_interface(dev, u->interface, fmt->altsetting) < 0) {
1799                printk(KERN_WARNING "usbaudio: usb_set_interface failed, device %d interface %d altsetting %d\n",
1800                       dev->devnum, u->interface, fmt->altsetting);
1801                return -1;
1802        }
1803        if (fmt->sratelo == fmt->sratehi)
1804                return 0;
1805        ep = usb_pipeendpoint(u->datapipe) | (u->datapipe & USB_DIR_IN);
1806        /* if endpoint has pitch control, enable it */
1807        if (fmt->attributes & 0x02) {
1808                data[0] = 1;
1809                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
1810                                           PITCH_CONTROL << 8, ep, data, 1, HZ)) < 0) {
1811                        printk(KERN_ERR "usbaudio: failure (error %d) to set output pitch control device %d interface %u endpoint 0x%x to %u\n",
1812                               ret, dev->devnum, u->interface, ep, d->srate);
1813                        return -1;
1814                }
1815        }
1816        /* if endpoint has sampling rate control, set it */
1817        if (fmt->attributes & 0x01) {
1818                data[0] = d->srate;
1819                data[1] = d->srate >> 8;
1820                data[2] = d->srate >> 16;
1821                if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
1822                                           SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
1823                        printk(KERN_ERR "usbaudio: failure (error %d) to set output sampling frequency device %d interface %u endpoint 0x%x to %u\n",
1824                               ret, dev->devnum, u->interface, ep, d->srate);
1825                        return -1;
1826                }
1827                if ((ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN,
1828                                           SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
1829                        printk(KERN_ERR "usbaudio: failure (error %d) to get output sampling frequency device %d interface %u endpoint 0x%x\n",
1830                               ret, dev->devnum, u->interface, ep);
1831                        return -1;
1832                }
1833                dprintk((KERN_DEBUG "usbaudio: set_format_out: device %d interface %d altsetting %d srate req: %u real %u\n",
1834                        dev->devnum, u->interface, fmt->altsetting, d->srate, data[0] | (data[1] << 8) | (data[2] << 16)));
1835                d->srate = data[0] | (data[1] << 8) | (data[2] << 16);
1836        }
1837        dprintk((KERN_DEBUG "usbaudio: set_format_out: USB format 0x%x, DMA format 0x%x srate %u\n", u->format, d->format, d->srate));
1838        return 0;
1839}
1840
1841static int set_format(struct usb_audiodev *s, unsigned int fmode, unsigned int fmt, unsigned int srate)
1842{
1843        int ret1 = 0, ret2 = 0;
1844
1845        if (!(fmode & (FMODE_READ|FMODE_WRITE)))
1846                return -EINVAL;
1847        if (fmode & FMODE_READ) {
1848                usbin_stop(s);
1849                s->usbin.dma.ready = 0;
1850                if (fmt == AFMT_QUERY)
1851                        fmt = s->usbin.dma.format;
1852                else
1853                        s->usbin.dma.format = fmt;
1854                if (!srate)
1855                        srate = s->usbin.dma.srate;
1856                else
1857                        s->usbin.dma.srate = srate;
1858        }
1859        if (fmode & FMODE_WRITE) {
1860                usbout_stop(s);
1861                s->usbout.dma.ready = 0;
1862                if (fmt == AFMT_QUERY)
1863                        fmt = s->usbout.dma.format;
1864                else
1865                        s->usbout.dma.format = fmt;
1866                if (!srate)
1867                        srate = s->usbout.dma.srate;
1868                else
1869                        s->usbout.dma.srate = srate;
1870        }
1871        if (fmode & FMODE_READ)
1872                ret1 = set_format_in(s);
1873        if (fmode & FMODE_WRITE)
1874                ret2 = set_format_out(s);
1875        return ret1 ? ret1 : ret2;
1876}
1877
1878/* --------------------------------------------------------------------- */
1879
1880static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
1881{
1882        struct usb_device *dev = ms->state->usbdev;
1883        unsigned char data[2];
1884        struct mixerchannel *ch;
1885        int v1, v2, v3;
1886
1887        if (mixch >= ms->numch)
1888                return -1;
1889        ch = &ms->ch[mixch];
1890        v3 = ch->maxval - ch->minval;
1891        v1 = value & 0xff;
1892        v2 = (value >> 8) & 0xff;
1893        if (v1 > 100)
1894                v1 = 100;
1895        if (v2 > 100)
1896                v2 = 100;
1897        if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
1898                v2 = v1;
1899        ch->value = v1 | (v2 << 8);
1900        v1 = (v1 * v3) / 100 + ch->minval;
1901        v2 = (v2 * v3) / 100 + ch->minval;
1902        switch (ch->selector) {
1903        case 0:  /* mixer unit request */
1904                data[0] = v1;
1905                data[1] = v1 >> 8;
1906                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1907                                    (ch->chnum << 8) | 1, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
1908                        goto err;
1909                if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
1910                        return 0;
1911                data[0] = v2;
1912                data[1] = v2 >> 8;
1913                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1914                                    ((ch->chnum + !!(ch->flags & MIXFLG_STEREOIN)) << 8) | (1 + !!(ch->flags & MIXFLG_STEREOOUT)),
1915                                    ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
1916                        goto err;
1917                return 0;
1918
1919                /* various feature unit controls */
1920        case VOLUME_CONTROL:
1921                data[0] = v1;
1922                data[1] = v1 >> 8;
1923                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1924                                    (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
1925                        goto err;
1926                if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
1927                        return 0;
1928                data[0] = v2;
1929                data[1] = v2 >> 8;
1930                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1931                                    (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
1932                        goto err;
1933                return 0;
1934                
1935        case BASS_CONTROL:
1936        case MID_CONTROL:
1937        case TREBLE_CONTROL:
1938                data[0] = v1 >> 8;
1939                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1940                                    (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 1, HZ) < 0)
1941                        goto err;
1942                if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
1943                        return 0;
1944                data[0] = v2 >> 8;
1945                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1946                                    (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 1, HZ) < 0)
1947                        goto err;
1948                return 0;
1949
1950        default:
1951                return -1;
1952        }
1953        return 0;
1954
1955 err:
1956        printk(KERN_ERR "usbaudio: mixer request device %u if %u unit %u ch %u selector %u failed\n", 
1957                dev->devnum, ms->iface, ch->unitid, ch->chnum, ch->selector);
1958        return -1;
1959}
1960
1961static int get_rec_src(struct usb_mixerdev *ms)
1962{
1963        struct usb_device *dev = ms->state->usbdev;
1964        unsigned int mask = 0, retmask = 0;
1965        unsigned int i, j;
1966        unsigned char buf;
1967        int err = 0;
1968
1969        for (i = 0; i < ms->numch; i++) {
1970                if (!ms->ch[i].slctunitid || (mask & (1 << i)))
1971                        continue;
1972                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1973                                    0, ms->iface | (ms->ch[i].slctunitid << 8), &buf, 1, HZ) < 0) {
1974                        err = -EIO;
1975                        printk(KERN_ERR "usbaudio: selector read request device %u if %u unit %u failed\n", 
1976                               dev->devnum, ms->iface, ms->ch[i].slctunitid & 0xff);
1977                        continue;
1978                }
1979                for (j = i; j < ms->numch; j++) {
1980                        if ((ms->ch[i].slctunitid ^ ms->ch[j].slctunitid) & 0xff)
1981                                continue;
1982                        mask |= 1 << j;
1983                        if (buf == (ms->ch[j].slctunitid >> 8))
1984                                retmask |= 1 << ms->ch[j].osschannel;
1985                }
1986        }
1987        if (err)
1988                return -EIO;
1989        return retmask;
1990}
1991
1992static int set_rec_src(struct usb_mixerdev *ms, int srcmask)
1993{
1994        struct usb_device *dev = ms->state->usbdev;
1995        unsigned int mask = 0, smask, bmask;
1996        unsigned int i, j;
1997        unsigned char buf;
1998        int err = 0;
1999
2000        for (i = 0; i < ms->numch; i++) {
2001                if (!ms->ch[i].slctunitid || (mask & (1 << i)))
2002                        continue;
2003                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
2004                                    0, ms->iface | (ms->ch[i].slctunitid << 8), &buf, 1, HZ) < 0) {
2005                        err = -EIO;
2006                        printk(KERN_ERR "usbaudio: selector read request device %u if %u unit %u failed\n", 
2007                               dev->devnum, ms->iface, ms->ch[i].slctunitid & 0xff);
2008                        continue;
2009                }
2010                /* first generate smask */
2011                smask = bmask = 0;
2012                for (j = i; j < ms->numch; j++) {
2013                        if ((ms->ch[i].slctunitid ^ ms->ch[j].slctunitid) & 0xff)
2014                                continue;
2015                        smask |= 1 << ms->ch[j].osschannel;
2016                        if (buf == (ms->ch[j].slctunitid >> 8))
2017                                bmask |= 1 << ms->ch[j].osschannel;
2018                        mask |= 1 << j;
2019                }
2020                /* check for multiple set sources */
2021                j = hweight32(srcmask & smask);
2022                if (j == 0)
2023                        continue;
2024                if (j > 1)
2025                        srcmask &= ~bmask;
2026                for (j = i; j < ms->numch; j++) {
2027                        if ((ms->ch[i].slctunitid ^ ms->ch[j].slctunitid) & 0xff)
2028                                continue;
2029                        if (!(srcmask & (1 << ms->ch[j].osschannel)))
2030                                continue;
2031                        buf = ms->ch[j].slctunitid >> 8;
2032                        if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
2033                                    0, ms->iface | (ms->ch[j].slctunitid << 8), &buf, 1, HZ) < 0) {
2034                                err = -EIO;
2035                                printk(KERN_ERR "usbaudio: selector write request device %u if %u unit %u failed\n", 
2036                                       dev->devnum, ms->iface, ms->ch[j].slctunitid & 0xff);
2037                                continue;
2038                        }
2039                }
2040        }
2041        return err ? -EIO : 0;
2042}
2043
2044/* --------------------------------------------------------------------- */
2045
2046/*
2047 * should be called with open_sem hold, so that no new processes
2048 * look at the audio device to be destroyed
2049 */
2050
2051static void release(struct usb_audio_state *s)
2052{
2053        struct usb_audiodev *as;
2054        struct usb_mixerdev *ms;
2055
2056        s->count--;
2057        if (s->count) {
2058                up(&open_sem);
2059                return;
2060        }
2061        up(&open_sem);
2062        wake_up(&open_wait);
2063        while (!list_empty(&s->audiolist)) {
2064                as = list_entry(s->audiolist.next, struct usb_audiodev, list);
2065                list_del(&as->list);
2066                usbin_release(as);
2067                usbout_release(as);
2068                dmabuf_release(&as->usbin.dma);
2069                dmabuf_release(&as->usbout.dma);
2070                kfree(as);
2071        }
2072        while (!list_empty(&s->mixerlist)) {
2073                ms = list_entry(s->mixerlist.next, struct usb_mixerdev, list);
2074                list_del(&ms->list);
2075                kfree(ms);
2076        }
2077        kfree(s);
2078}
2079
2080static inline int prog_dmabuf_in(struct usb_audiodev *as)
2081{
2082        usbin_stop(as);
2083        return dmabuf_init(&as->usbin.dma);
2084}
2085
2086static inline int prog_dmabuf_out(struct usb_audiodev *as)
2087{
2088        usbout_stop(as);
2089        return dmabuf_init(&as->usbout.dma);
2090}
2091
2092/* --------------------------------------------------------------------- */
2093
2094static int usb_audio_open_mixdev(struct inode *inode, struct file *file)
2095{
2096        int minor = MINOR(inode->i_rdev);
2097        struct list_head *devs, *mdevs;
2098        struct usb_mixerdev *ms;
2099        struct usb_audio_state *s;
2100
2101        down(&open_sem);
2102        for (devs = audiodevs.next; devs != &audiodevs; devs = devs->next) {
2103                s = list_entry(devs, struct usb_audio_state, audiodev);
2104                for (mdevs = s->mixerlist.next; mdevs != &s->mixerlist; mdevs = mdevs->next) {
2105                        ms = list_entry(mdevs, struct usb_mixerdev, list);
2106                        if (ms->dev_mixer == minor)
2107                                goto mixer_found;
2108                }
2109        }
2110        up(&open_sem);
2111        return -ENODEV;
2112
2113 mixer_found:
2114        if (!s->usbdev) {
2115                up(&open_sem);
2116                return -EIO;
2117        }
2118        file->private_data = ms;
2119        s->count++;
2120
2121        up(&open_sem);
2122        return 0;
2123}
2124
2125static int usb_audio_release_mixdev(struct inode *inode, struct file *file)
2126{
2127        struct usb_mixerdev *ms = (struct usb_mixerdev *)file->private_data;
2128        struct usb_audio_state *s;
2129
2130        lock_kernel();
2131        s = ms->state;
2132        down(&open_sem);
2133        release(s);
2134        unlock_kernel();
2135        return 0;
2136}
2137
2138static int usb_audio_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
2139{
2140        struct usb_mixerdev *ms = (struct usb_mixerdev *)file->private_data;
2141        int i, j, val;
2142
2143        if (!ms->state->usbdev)
2144                return -ENODEV;
2145  
2146        if (cmd == SOUND_MIXER_INFO) {
2147                mixer_info info;
2148
2149                memset(&info, 0, sizeof(info));
2150                strncpy(info.id, "USB_AUDIO", sizeof(info.id));
2151                strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
2152                info.modify_counter = ms->modcnt;
2153                if (copy_to_user((void *)arg, &info, sizeof(info)))
2154                        return -EFAULT;
2155                return 0;
2156        }
2157        if (cmd == SOUND_OLD_MIXER_INFO) {
2158                _old_mixer_info info;
2159
2160                memset(&info, 0, sizeof(info));
2161                strncpy(info.id, "USB_AUDIO", sizeof(info.id));
2162                strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
2163                if (copy_to_user((void *)arg, &info, sizeof(info)))
2164                        return -EFAULT;
2165                return 0;
2166        }
2167        if (cmd == OSS_GETVERSION)
2168                return put_user(SOUND_VERSION, (int *)arg);
2169        if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int))
2170                return -EINVAL;
2171        if (_IOC_DIR(cmd) == _IOC_READ) {
2172                switch (_IOC_NR(cmd)) {
2173                case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
2174                        val = get_rec_src(ms);
2175                        if (val < 0)
2176                                return val;
2177                        return put_user(val, (int *)arg);
2178
2179                case SOUND_MIXER_DEVMASK: /* Arg contains a bit for each supported device */
2180                        for (val = i = 0; i < ms->numch; i++)
2181                                val |= 1 << ms->ch[i].osschannel;
2182                        return put_user(val, (int *)arg);
2183
2184                case SOUND_MIXER_RECMASK: /* Arg contains a bit for each supported recording source */
2185                        for (val = i = 0; i < ms->numch; i++)
2186                                if (ms->ch[i].slctunitid)
2187                                        val |= 1 << ms->ch[i].osschannel;
2188                        return put_user(val, (int *)arg);
2189
2190                case SOUND_MIXER_STEREODEVS: /* Mixer channels supporting stereo */
2191                        for (val = i = 0; i < ms->numch; i++)
2192                                if (ms->ch[i].flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT))
2193                                        val |= 1 << ms->ch[i].osschannel;
2194                        return put_user(val, (int *)arg);
2195                        
2196                case SOUND_MIXER_CAPS:
2197                        return put_user(SOUND_CAP_EXCL_INPUT, (int *)arg);
2198
2199                default:
2200                        i = _IOC_NR(cmd);
2201                        if (i >= SOUND_MIXER_NRDEVICES)
2202                                return -EINVAL;
2203                        for (j = 0; j < ms->numch; j++) {
2204                                if (ms->ch[j].osschannel == i) {
2205                                        return put_user(ms->ch[j].value, (int *)arg);
2206                                }
2207                        }
2208                        return -EINVAL;
2209                }
2210        }
2211        if (_IOC_DIR(cmd) != (_IOC_READ|_IOC_WRITE)) 
2212                return -EINVAL;
2213        ms->modcnt++;
2214        switch (_IOC_NR(cmd)) {
2215        case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
2216                if (get_user(val, (int *)arg))
2217                        return -EFAULT;
2218                return set_rec_src(ms, val);
2219
2220        default:
2221                i = _IOC_NR(cmd);
2222                if (i >= SOUND_MIXER_NRDEVICES)
2223                        return -EINVAL;
2224                for (j = 0; j < ms->numch && ms->ch[j].osschannel != i; j++);
2225                if (j >= ms->numch)
2226                        return -EINVAL;
2227                if (get_user(val, (int *)arg))
2228                        return -EFAULT;
2229                if (wrmixer(ms, j, val))
2230                        return -EIO;
2231                return put_user(ms->ch[j].value, (int *)arg);
2232        }
2233}
2234
2235static /*const*/ struct file_operations usb_mixer_fops = {
2236        owner:          THIS_MODULE,
2237        llseek:         no_llseek,
2238        ioctl:          usb_audio_ioctl_mixdev,
2239        open:           usb_audio_open_mixdev,
2240        release:        usb_audio_release_mixdev,
2241};
2242
2243/* --------------------------------------------------------------------- */
2244
2245static int drain_out(struct usb_audiodev *as, int nonblock)
2246{
2247        DECLARE_WAITQUEUE(wait, current);
2248        unsigned long flags;
2249        int count, tmo;
2250        
2251        if (as->usbout.dma.mapped || !as->usbout.dma.ready)
2252                return 0;
2253        usbout_start(as);
2254        add_wait_queue(&as->usbout.dma.wait, &wait);
2255        for (;;) {
2256                __set_current_state(TASK_INTERRUPTIBLE);
2257                spin_lock_irqsave(&as->lock, flags);
2258                count = as->usbout.dma.count;
2259                spin_unlock_irqrestore(&as->lock, flags);
2260                if (count <= 0)
2261                        break;
2262                if (signal_pending(current))
2263                        break;
2264                if (nonblock) {
2265                        remove_wait_queue(&as->usbout.dma.wait, &wait);
2266                        set_current_state(TASK_RUNNING);
2267                        return -EBUSY;
2268                }
2269                tmo = 3 * HZ * count / (as->usbout.dma.srate * 
2270                                        AFMT_SAMPLEBYTES(as->usbout.dma.format));
2271                if (!schedule_timeout(tmo + 1)) {
2272                        printk(KERN_DEBUG "usbaudio: dma timed out??\n");
2273                        break;
2274                }
2275        }
2276        remove_wait_queue(&as->usbout.dma.wait, &wait);
2277        set_current_state(TASK_RUNNING);
2278        if (signal_pending(current))
2279                return -ERESTARTSYS;
2280        return 0;
2281}
2282
2283/* --------------------------------------------------------------------- */
2284
2285static ssize_t usb_audio_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
2286{
2287        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
2288        DECLARE_WAITQUEUE(wait, current);
2289        ssize_t ret = 0;
2290        unsigned long flags;
2291        unsigned int ptr;
2292        int cnt, err;
2293
2294        if (ppos != &file->f_pos)
2295                return -ESPIPE;
2296        if (as->usbin.dma.mapped)
2297                return -ENXIO;
2298        if (!as->usbin.dma.ready && (ret = prog_dmabuf_in(as)))
2299                return ret;
2300        if (!access_ok(VERIFY_WRITE, buffer, count))
2301                return -EFAULT;
2302        add_wait_queue(&as->usbin.dma.wait, &wait);
2303        while (count > 0) {
2304                spin_lock_irqsave(&as->lock, flags);
2305                ptr = as->usbin.dma.rdptr;
2306                cnt = as->usbin.dma.count;
2307                /* set task state early to avoid wakeup races */
2308                if (cnt <= 0)
2309                        __set_current_state(TASK_INTERRUPTIBLE);
2310                spin_unlock_irqrestore(&as->lock, flags);
2311                if (cnt > count)
2312                        cnt = count;
2313                if (cnt <= 0) {
2314                        if (as->usbin.dma.enabled && usbin_start(as)) {
2315                                if (!ret)
2316                                        ret = -ENODEV;
2317                                break;
2318                        }
2319                        if (file->f_flags & O_NONBLOCK) {
2320                                if (!ret)
2321                                        ret = -EAGAIN;
2322                                break;
2323                        }
2324                        schedule();
2325                        if (signal_pending(current)) {
2326                                if (!ret)
2327                                        ret = -ERESTARTSYS;
2328                                break;
2329                        }
2330                        continue;
2331                }
2332                if ((err = dmabuf_copyout_user(&as->usbin.dma, ptr, buffer, cnt))) {
2333                        if (!ret)
2334                                ret = err;
2335                        break;
2336                }
2337                ptr += cnt;
2338                if (ptr >= as->usbin.dma.dmasize)
2339                        ptr -= as->usbin.dma.dmasize;
2340                spin_lock_irqsave(&as->lock, flags);
2341                as->usbin.dma.rdptr = ptr;
2342                as->usbin.dma.count -= cnt;
2343                spin_unlock_irqrestore(&as->lock, flags);
2344                count -= cnt;
2345                buffer += cnt;
2346                ret += cnt;
2347                if (as->usbin.dma.enabled && usbin_start(as)) {
2348                        if (!ret)
2349                                ret = -ENODEV;
2350                        break;
2351                }
2352        }
2353        __set_current_state(TASK_RUNNING);
2354        remove_wait_queue(&as->usbin.dma.wait, &wait);
2355        return ret;
2356}
2357
2358static ssize_t usb_audio_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
2359{
2360        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
2361        DECLARE_WAITQUEUE(wait, current);
2362        ssize_t ret = 0;
2363        unsigned long flags;
2364        unsigned int ptr;
2365        unsigned int start_thr;
2366        int cnt, err;
2367
2368        if (ppos != &file->f_pos)
2369                return -ESPIPE;
2370        if (as->usbout.dma.mapped)
2371                return -ENXIO;
2372        if (!as->usbout.dma.ready && (ret = prog_dmabuf_out(as)))
2373                return ret;
2374        if (!access_ok(VERIFY_READ, buffer, count))
2375                return -EFAULT;
2376        start_thr = (as->usbout.dma.srate * AFMT_SAMPLEBYTES(as->usbout.dma.format)) / (1000 / (3 * DESCFRAMES));
2377        add_wait_queue(&as->usbout.dma.wait, &wait);
2378        while (count > 0) {
2379#if 0
2380                printk(KERN_DEBUG "usb_audio_write: count %u dma: count %u rdptr %u wrptr %u dmasize %u fragsize %u flags 0x%02x taskst 0x%lx\n",
2381                       count, as->usbout.dma.count, as->usbout.dma.rdptr, as->usbout.dma.wrptr, as->usbout.dma.dmasize, as->usbout.dma.fragsize,
2382                       as->usbout.flags, current->state);
2383#endif
2384                spin_lock_irqsave(&as->lock, flags);
2385                if (as->usbout.dma.count < 0) {
2386                        as->usbout.dma.count = 0;
2387                        as->usbout.dma.rdptr = as->usbout.dma.wrptr;
2388                }
2389                ptr = as->usbout.dma.wrptr;
2390                cnt = as->usbout.dma.dmasize - as->usbout.dma.count;
2391                /* set task state early to avoid wakeup races */
2392                if (cnt <= 0)
2393                        __set_current_state(TASK_INTERRUPTIBLE);
2394                spin_unlock_irqrestore(&as->lock, flags);
2395                if (cnt > count)
2396                        cnt = count;
2397                if (cnt <= 0) {
2398                        if (as->usbout.dma.enabled && usbout_start(as)) {
2399                                if (!ret)
2400                                        ret = -ENODEV;
2401                                break;
2402                        }
2403                        if (file->f_flags & O_NONBLOCK) {
2404                                if (!ret)
2405                                        ret = -EAGAIN;
2406                                break;
2407                        }
2408                        schedule();
2409                        if (signal_pending(current)) {
2410                                if (!ret)
2411                                        ret = -ERESTARTSYS;
2412                                break;
2413                        }
2414                        continue;
2415                }
2416                if ((err = dmabuf_copyin_user(&as->usbout.dma, ptr, buffer, cnt))) {
2417                        if (!ret)
2418                                ret = err;
2419                        break;
2420                }
2421                ptr += cnt;
2422                if (ptr >= as->usbout.dma.dmasize)
2423                        ptr -= as->usbout.dma.dmasize;
2424                spin_lock_irqsave(&as->lock, flags);
2425                as->usbout.dma.wrptr = ptr;
2426                as->usbout.dma.count += cnt;
2427                spin_unlock_irqrestore(&as->lock, flags);
2428                count -= cnt;
2429                buffer += cnt;
2430                ret += cnt;
2431                if (as->usbout.dma.enabled && as->usbout.dma.count >= start_thr && usbout_start(as)) {
2432                        if (!ret)
2433                                ret = -ENODEV;
2434                        break;
2435                }
2436        }
2437        __set_current_state(TASK_RUNNING);
2438        remove_wait_queue(&as->usbout.dma.wait, &wait);
2439        return ret;
2440}
2441
2442/* Called without the kernel lock - fine */
2443static unsigned int usb_audio_poll(struct file *file, struct poll_table_struct *wait)
2444{
2445        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
2446        unsigned long flags;
2447        unsigned int mask = 0;
2448
2449        if (file->f_mode & FMODE_WRITE) {
2450                if (!as->usbout.dma.ready)
2451                        prog_dmabuf_out(as);
2452                poll_wait(file, &as->usbout.dma.wait, wait);
2453        }
2454        if (file->f_mode & FMODE_READ) {
2455                if (!as->usbin.dma.ready)
2456                        prog_dmabuf_in(as);
2457                poll_wait(file, &as->usbin.dma.wait, wait);
2458        }
2459        spin_lock_irqsave(&as->lock, flags);
2460        if (file->f_mode & FMODE_READ) {
2461                if (as->usbin.dma.count >= (signed)as->usbin.dma.fragsize)
2462                        mask |= POLLIN | POLLRDNORM;
2463        }
2464        if (file->f_mode & FMODE_WRITE) {
2465                if (as->usbout.dma.mapped) {
2466                        if (as->usbout.dma.count >= (signed)as->usbout.dma.fragsize) 
2467                                mask |= POLLOUT | POLLWRNORM;
2468                } else {
2469                        if ((signed)as->usbout.dma.dmasize >= as->usbout.dma.count + (signed)as->usbout.dma.fragsize)
2470                                mask |= POLLOUT | POLLWRNORM;
2471                }
2472        }
2473        spin_unlock_irqrestore(&as->lock, flags);
2474        return mask;
2475}
2476
2477static int usb_audio_mmap(struct file *file, struct vm_area_struct *vma)
2478{
2479        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
2480        struct dmabuf *db;
2481        int ret = -EINVAL;
2482
2483        lock_kernel();
2484        if (vma->vm_flags & VM_WRITE) {
2485                if ((ret = prog_dmabuf_out(as)) != 0)
2486                        goto out;
2487                db = &as->usbout.dma;
2488        } else if (vma->vm_flags & VM_READ) {
2489                if ((ret = prog_dmabuf_in(as)) != 0)
2490                        goto out;
2491                db = &as->usbin.dma;
2492        } else
2493                goto out;
2494
2495        ret = -EINVAL;
2496        if (vma->vm_pgoff != 0)
2497                goto out;
2498
2499        ret = dmabuf_mmap(db,  vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot);
2500out:
2501        unlock_kernel();
2502        return ret;
2503}
2504
2505static int usb_audio_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
2506{
2507        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
2508        struct usb_audio_state *s = as->state;
2509        unsigned long flags;
2510        audio_buf_info abinfo;
2511        count_info cinfo;
2512        int val = 0;
2513        int val2, mapped, ret;
2514
2515        if (!s->usbdev)
2516                return -EIO;
2517        mapped = ((file->f_mode & FMODE_WRITE) && as->usbout.dma.mapped) ||
2518                ((file->f_mode & FMODE_READ) && as->usbin.dma.mapped);
2519#if 0
2520        if (arg)
2521                get_user(val, (int *)arg);
2522        printk(KERN_DEBUG "usbaudio: usb_audio_ioctl cmd=%x arg=%lx *arg=%d\n", cmd, arg, val)
2523#endif
2524        switch (cmd) {
2525        case OSS_GETVERSION:
2526                return put_user(SOUND_VERSION, (int *)arg);
2527
2528        case SNDCTL_DSP_SYNC:
2529                if (file->f_mode & FMODE_WRITE)
2530                        return drain_out(as, 0/*file->f_flags & O_NONBLOCK*/);
2531                return 0;
2532
2533        case SNDCTL_DSP_SETDUPLEX:
2534                return 0;
2535
2536        case SNDCTL_DSP_GETCAPS:
2537                return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | 
2538                                DSP_CAP_MMAP | DSP_CAP_BATCH, (int *)arg);
2539
2540        case SNDCTL_DSP_RESET:
2541                if (file->f_mode & FMODE_WRITE) {
2542                        usbout_stop(as);
2543                        as->usbout.dma.rdptr = as->usbout.dma.wrptr = as->usbout.dma.count = as->usbout.dma.total_bytes = 0;
2544                }
2545                if (file->f_mode & FMODE_READ) {
2546                        usbin_stop(as);
2547                        as->usbin.dma.rdptr = as->usbin.dma.wrptr = as->usbin.dma.count = as->usbin.dma.total_bytes = 0;
2548                }
2549                return 0;
2550
2551        case SNDCTL_DSP_SPEED:
2552                if (get_user(val, (int *)arg))
2553                        return -EFAULT;
2554                if (val >= 0) {
2555                        if (val < 4000)
2556                                val = 4000;
2557                        if (val > 100000)
2558                                val = 100000;
2559                        if (set_format(as, file->f_mode, AFMT_QUERY, val))
2560                                return -EIO;
2561                }
2562                return put_user((file->f_mode & FMODE_READ) ? as->usbin.dma.srate : as->usbout.dma.srate, (int *)arg);
2563
2564        case SNDCTL_DSP_STEREO:
2565                if (get_user(val, (int *)arg))
2566                        return -EFAULT;
2567                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
2568                val2 &= 0x00ffffff;
2569                if (val)
2570                        val2 |= AFMT_STEREO;
2571                else
2572                        val2 &= ~AFMT_STEREO;
2573                if (set_format(as, file->f_mode, val2, 0))
2574                        return -EIO;
2575                return 0;
2576
2577        case SNDCTL_DSP_CHANNELS:
2578                if (get_user(val, (int *)arg))
2579                        return -EFAULT;
2580                if (val != 0) {
2581                        val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
2582                        
2583                        val2 &= 0x00ffffff;
2584                        val2 |= (val-1)<<24;
2585
2586                        if (set_format(as, file->f_mode, val2, 0))
2587                                return -EIO;
2588                }
2589                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
2590                return put_user(AFMT_CHANNELS(val2), (int *)arg);
2591
2592        case SNDCTL_DSP_GETFMTS: /* Returns a mask */
2593                return put_user(AFMT_U8 | AFMT_U16_LE | AFMT_U16_BE |
2594                                AFMT_S8 | AFMT_S16_LE | AFMT_S16_BE |
2595                                AFMT_U24_LE | AFMT_U24_BE | AFMT_S24_LE | AFMT_S24_BE |
2596                                AFMT_U32_LE | AFMT_U32_BE | AFMT_S32_LE | AFMT_S32_BE,
2597                                (int *)arg);
2598
2599        case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
2600                if (get_user(val, (int *)arg))
2601                        return -EFAULT;
2602                if (val != AFMT_QUERY) {
2603                        if (hweight32(val) != 1)
2604                                return -EINVAL;
2605                        if (!(val & (AFMT_U8 | AFMT_U16_LE | AFMT_U16_BE |
2606                                     AFMT_S8 | AFMT_S16_LE | AFMT_S16_BE |
2607                                     AFMT_U24_LE | AFMT_U24_BE | AFMT_S24_LE | AFMT_S24_BE |
2608                                     AFMT_U32_LE | AFMT_U32_BE | AFMT_S32_LE | AFMT_S32_BE)))
2609                                return -EINVAL;
2610                        val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
2611                        val |= val2 & AFMT_CHMASK;
2612                        if (set_format(as, file->f_mode, val, 0))
2613                                return -EIO;
2614                }
2615                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
2616                return put_user(val2 & ~AFMT_CHMASK, (int *)arg);
2617
2618        case SNDCTL_DSP_POST:
2619                return 0;
2620
2621        case SNDCTL_DSP_GETTRIGGER:
2622                val = 0;
2623                if (file->f_mode & FMODE_READ && as->usbin.flags & FLG_RUNNING) 
2624                        val |= PCM_ENABLE_INPUT;
2625                if (file->f_mode & FMODE_WRITE && as->usbout.flags & FLG_RUNNING) 
2626                        val |= PCM_ENABLE_OUTPUT;
2627                return put_user(val, (int *)arg);
2628
2629        case SNDCTL_DSP_SETTRIGGER:
2630                if (get_user(val, (int *)arg))
2631                        return -EFAULT;
2632                if (file->f_mode & FMODE_READ) {
2633                        if (val & PCM_ENABLE_INPUT) {
2634                                if (!as->usbin.dma.ready && (ret = prog_dmabuf_in(as)))
2635                                        return ret;
2636                                as->usbin.dma.enabled = 1;
2637                                if (usbin_start(as))
2638                                        return -ENODEV;
2639                        } else {
2640                                as->usbin.dma.enabled = 0;
2641                                usbin_stop(as);
2642                        }
2643                }
2644                if (file->f_mode & FMODE_WRITE) {
2645                        if (val & PCM_ENABLE_OUTPUT) {
2646                                if (!as->usbout.dma.ready && (ret = prog_dmabuf_out(as)))
2647                                        return ret;
2648                                as->usbout.dma.enabled = 1;
2649                                if (usbout_start(as))
2650                                        return -ENODEV;
2651                        } else {
2652                                as->usbout.dma.enabled = 0;
2653                                usbout_stop(as);
2654                        }
2655                }
2656                return 0;
2657
2658        case SNDCTL_DSP_GETOSPACE:
2659                if (!(file->f_mode & FMODE_WRITE))
2660                        return -EINVAL;
2661
2662                /*if (!(as->usbout.flags & FLG_RUNNING) && (val = prog_dmabuf_out(as)) != 0)
2663
2664                The above is potentially disasterous; if the
2665                userspace app calls the GETOSPACE ioctl() before a
2666                data write on the device (as can happen in a
2667                sensible client that's tracking the write buffer
2668                low watermark), the kernel driver will never
2669                recover from momentary starvation (recall that
2670                FLG_RUNNING will be cleared by usbout_completed)
2671                because the ioctl will keep resetting the DMA
2672                buffer before each write, potentially never
2673                allowing us to fill the buffer back to the DMA
2674                restart threshhold.
2675
2676                Can you tell this was actually biting me? :-) */
2677
2678                if ((!as->usbout.dma.ready) && (val = prog_dmabuf_out(as)) != 0)
2679                        return val;
2680                spin_lock_irqsave(&as->lock, flags);
2681                abinfo.fragsize = as->usbout.dma.fragsize;
2682                abinfo.bytes = as->usbout.dma.dmasize - as->usbout.dma.count;
2683                abinfo.fragstotal = as->usbout.dma.numfrag;
2684                abinfo.fragments = abinfo.bytes >> as->usbout.dma.fragshift;      
2685                spin_unlock_irqrestore(&as->lock, flags);
2686                return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2687
2688        case SNDCTL_DSP_GETISPACE:
2689                if (!(file->f_mode & FMODE_READ))
2690                        return -EINVAL;
2691                
2692                /*if (!(as->usbin.flags & FLG_RUNNING) && (val = prog_dmabuf_in(as)) != 0)*/
2693                if ((!as->usbin.dma.ready) && (val = prog_dmabuf_in(as)) != 0)
2694                        return val;
2695                spin_lock_irqsave(&as->lock, flags);
2696                abinfo.fragsize = as->usbin.dma.fragsize;
2697                abinfo.bytes = as->usbin.dma.count;
2698                abinfo.fragstotal = as->usbin.dma.numfrag;
2699                abinfo.fragments = abinfo.bytes >> as->usbin.dma.fragshift;      
2700                spin_unlock_irqrestore(&as->lock, flags);
2701                return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2702                
2703        case SNDCTL_DSP_NONBLOCK:
2704                file->f_flags |= O_NONBLOCK;
2705                return 0;
2706
2707        case SNDCTL_DSP_GETODELAY:
2708                if (!(file->f_mode & FMODE_WRITE))
2709                        return -EINVAL;
2710                spin_lock_irqsave(&as->lock, flags);
2711                val = as->usbout.dma.count;
2712                spin_unlock_irqrestore(&as->lock, flags);
2713                return put_user(val, (int *)arg);
2714
2715        case SNDCTL_DSP_GETIPTR:
2716                if (!(file->f_mode & FMODE_READ))
2717                        return -EINVAL;
2718                spin_lock_irqsave(&as->lock, flags);
2719                cinfo.bytes = as->usbin.dma.total_bytes;
2720                cinfo.blocks = as->usbin.dma.count >> as->usbin.dma.fragshift;
2721                cinfo.ptr = as->usbin.dma.wrptr;
2722                if (as->usbin.dma.mapped)
2723                        as->usbin.dma.count &= as->usbin.dma.fragsize-1;
2724                spin_unlock_irqrestore(&as->lock, flags);
2725                return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
2726
2727        case SNDCTL_DSP_GETOPTR:
2728                if (!(file->f_mode & FMODE_WRITE))
2729                        return -EINVAL;
2730                spin_lock_irqsave(&as->lock, flags);
2731                cinfo.bytes = as->usbout.dma.total_bytes;
2732                cinfo.blocks = as->usbout.dma.count >> as->usbout.dma.fragshift;
2733                cinfo.ptr = as->usbout.dma.rdptr;
2734                if (as->usbout.dma.mapped)
2735                        as->usbout.dma.count &= as->usbout.dma.fragsize-1;
2736                spin_unlock_irqrestore(&as->lock, flags);
2737                return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
2738
2739       case SNDCTL_DSP_GETBLKSIZE:
2740                if (file->f_mode & FMODE_WRITE) {
2741
2742                  /* do not clobber devices that are already running! */
2743                  if ((!as->usbout.dma.ready) && (val = prog_dmabuf_out(as)) != 0)
2744                                return val;
2745                        return put_user(as->usbout.dma.fragsize, (int *)arg);
2746                }
2747                /* do not clobber devices that are already running! */
2748                if ((!as->usbin.dma.ready) && (val = prog_dmabuf_in(as)) != 0)
2749                        return val;
2750                return put_user(as->usbin.dma.fragsize, (int *)arg);
2751
2752        case SNDCTL_DSP_SETFRAGMENT:
2753                if (get_user(val, (int *)arg))
2754                        return -EFAULT;
2755                if (file->f_mode & FMODE_READ) {
2756                        as->usbin.dma.ossfragshift = val & 0xffff;
2757                        as->usbin.dma.ossmaxfrags = (val >> 16) & 0xffff;
2758                        if (as->usbin.dma.ossfragshift < 4)
2759                                as->usbin.dma.ossfragshift = 4;
2760                        if (as->usbin.dma.ossfragshift > 15)
2761                                as->usbin.dma.ossfragshift = 15;
2762                        if (as->usbin.dma.ossmaxfrags < 4)
2763                                as->usbin.dma.ossmaxfrags = 4;
2764                }
2765                if (file->f_mode & FMODE_WRITE) {
2766                        as->usbout.dma.ossfragshift = val & 0xffff;
2767                        as->usbout.dma.ossmaxfrags = (val >> 16) & 0xffff;
2768                        if (as->usbout.dma.ossfragshift < 4)
2769                                as->usbout.dma.ossfragshift = 4;
2770                        if (as->usbout.dma.ossfragshift > 15)
2771                                as->usbout.dma.ossfragshift = 15;
2772                        if (as->usbout.dma.ossmaxfrags < 4)
2773                                as->usbout.dma.ossmaxfrags = 4;
2774                }
2775                return 0;
2776
2777        case SNDCTL_DSP_SUBDIVIDE:
2778                if ((file->f_mode & FMODE_READ && as->usbin.dma.subdivision) ||
2779                    (file->f_mode & FMODE_WRITE && as->usbout.dma.subdivision))
2780                        return -EINVAL;
2781                if (get_user(val, (int *)arg))
2782                        return -EFAULT;
2783                if (val != 1 && val != 2 && val != 4)
2784                        return -EINVAL;
2785                if (file->f_mode & FMODE_READ)
2786                        as->usbin.dma.subdivision = val;
2787                if (file->f_mode & FMODE_WRITE)
2788                        as->usbout.dma.subdivision = val;
2789                return 0;
2790
2791        case SOUND_PCM_READ_RATE:
2792                return put_user((file->f_mode & FMODE_READ) ? as->usbin.dma.srate : as->usbout.dma.srate, (int *)arg);
2793
2794        case SOUND_PCM_READ_CHANNELS:
2795                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
2796                return put_user(AFMT_CHANNELS(val2), (int *)arg);
2797
2798        case SOUND_PCM_READ_BITS:
2799                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
2800                return put_user(AFMT_BYTES(val2) * 8, (int *)arg);
2801
2802        case SOUND_PCM_WRITE_FILTER:
2803        case SNDCTL_DSP_SETSYNCRO:
2804        case SOUND_PCM_READ_FILTER:
2805                return -EINVAL;
2806        }
2807        dprintk((KERN_DEBUG "usbaudio: usb_audio_ioctl - no command found\n"));
2808        return -ENOIOCTLCMD;
2809}
2810
2811static int usb_audio_open(struct inode *inode, struct file *file)
2812{
2813        int minor = MINOR(inode->i_rdev);
2814        DECLARE_WAITQUEUE(wait, current);
2815        struct list_head *devs, *adevs;
2816        struct usb_audiodev *as;
2817        struct usb_audio_state *s;
2818
2819        for (;;) {
2820                down(&open_sem);
2821                for (devs = audiodevs.next; devs != &audiodevs; devs = devs->next) {
2822                        s = list_entry(devs, struct usb_audio_state, audiodev);
2823                        for (adevs = s->audiolist.next; adevs != &s->audiolist; adevs = adevs->next) {
2824                                as = list_entry(adevs, struct usb_audiodev, list);
2825                                if (!((as->dev_audio ^ minor) & ~0xf))
2826                                        goto device_found;
2827                        }
2828                }
2829                up(&open_sem);
2830                return -ENODEV;
2831
2832        device_found:
2833                if (!s->usbdev) {
2834                        up(&open_sem);
2835                        return -EIO;
2836                }
2837                /* wait for device to become free */
2838                if (!(as->open_mode & file->f_mode))
2839                        break;
2840                if (file->f_flags & O_NONBLOCK) {
2841                        up(&open_sem);
2842                        return -EBUSY;
2843                }
2844                __set_current_state(TASK_INTERRUPTIBLE);
2845                add_wait_queue(&open_wait, &wait);
2846                up(&open_sem);
2847                schedule();
2848                __set_current_state(TASK_RUNNING);
2849                remove_wait_queue(&open_wait, &wait);
2850                if (signal_pending(current))
2851                        return -ERESTARTSYS;
2852        }
2853        if (file->f_mode & FMODE_READ) {
2854                as->usbin.dma.ossfragshift = as->usbin.dma.ossmaxfrags = as->usbin.dma.subdivision = 0;
2855                as->usbin.dma.enabled = 1;
2856        }
2857        if (file->f_mode & FMODE_WRITE) {
2858                as->usbout.dma.ossfragshift = as->usbout.dma.ossmaxfrags = as->usbout.dma.subdivision = 0;
2859                as->usbout.dma.enabled = 1;
2860        }
2861        if (set_format(as, file->f_mode, ((minor & 0xf) == SND_DEV_DSP16) ? AFMT_S16_LE : AFMT_U8 /* AFMT_ULAW */, 8000)) {
2862                up(&open_sem);
2863                return -EIO;
2864        }
2865        file->private_data = as;
2866        as->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
2867        s->count++;
2868        up(&open_sem);
2869        return 0;
2870}
2871
2872static int usb_audio_release(struct inode *inode, struct file *file)
2873{
2874        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
2875        struct usb_audio_state *s;
2876        struct usb_device *dev;
2877        struct usb_interface *iface;
2878
2879        lock_kernel();
2880        s = as->state;
2881        dev = s->usbdev;
2882        if (file->f_mode & FMODE_WRITE)
2883                drain_out(as, file->f_flags & O_NONBLOCK);
2884        down(&open_sem);
2885        if (file->f_mode & FMODE_WRITE) {
2886                usbout_stop(as);
2887                if (dev && as->usbout.interface >= 0) {
2888                        iface = &dev->actconfig->interface[as->usbout.interface];
2889                        usb_set_interface(dev, iface->altsetting->bInterfaceNumber, 0);
2890                }
2891                dmabuf_release(&as->usbout.dma);
2892                usbout_release(as);
2893        }
2894        if (file->f_mode & FMODE_READ) {
2895                usbin_stop(as);
2896                if (dev && as->usbin.interface >= 0) {
2897                        iface = &dev->actconfig->interface[as->usbin.interface];
2898                        usb_set_interface(dev, iface->altsetting->bInterfaceNumber, 0);
2899                }
2900                dmabuf_release(&as->usbin.dma);
2901                usbin_release(as);
2902        }
2903        as->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
2904        release(s);
2905        wake_up(&open_wait);
2906        unlock_kernel();
2907        return 0;
2908}
2909
2910static /*const*/ struct file_operations usb_audio_fops = {
2911        owner:          THIS_MODULE,
2912        llseek:         no_llseek,
2913        read:           usb_audio_read,
2914        write:          usb_audio_write,
2915        poll:           usb_audio_poll,
2916        ioctl:          usb_audio_ioctl,
2917        mmap:           usb_audio_mmap,
2918        open:           usb_audio_open,
2919        release:        usb_audio_release,
2920};
2921
2922/* --------------------------------------------------------------------- */
2923
2924static void * usb_audio_probe(struct usb_device *dev, unsigned int ifnum,
2925                              const struct usb_device_id *id);
2926static void usb_audio_disconnect(struct usb_device *dev, void *ptr);
2927
2928static struct usb_device_id usb_audio_ids [] = {
2929    { match_flags: (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS),
2930      bInterfaceClass: USB_CLASS_AUDIO, bInterfaceSubClass: 1},
2931    { }                                         /* Terminating entry */
2932};
2933
2934MODULE_DEVICE_TABLE (usb, usb_audio_ids);
2935
2936static struct usb_driver usb_audio_driver = {
2937        name:           "audio",
2938        probe:          usb_audio_probe,
2939        disconnect:     usb_audio_disconnect,
2940        driver_list:    LIST_HEAD_INIT(usb_audio_driver.driver_list), 
2941        id_table:       usb_audio_ids,
2942};
2943
2944static void *find_descriptor(void *descstart, unsigned int desclen, void *after, 
2945                             u8 dtype, int iface, int altsetting)
2946{
2947        u8 *p, *end, *next;
2948        int ifc = -1, as = -1;
2949
2950        p = descstart;
2951        end = p + desclen;
2952        for (; p < end;) {
2953                if (p[0] < 2)
2954                        return NULL;
2955                next = p + p[0];
2956                if (next > end)
2957                        return NULL;
2958                if (p[1] == USB_DT_INTERFACE) {
2959                        /* minimum length of interface descriptor */
2960                        if (p[0] < 9)
2961                                return NULL;
2962                        ifc = p[2];
2963                        as = p[3];
2964                }
2965                if (p[1] == dtype && (!after || (void *)p > after) &&
2966                    (iface == -1 || iface == ifc) && (altsetting == -1 || altsetting == as)) {
2967                        return p;
2968                }
2969                p = next;
2970        }
2971        return NULL;
2972}
2973
2974static void *find_csinterface_descriptor(void *descstart, unsigned int desclen, void *after, u8 dsubtype, int iface, int altsetting)
2975{
2976        unsigned char *p;
2977
2978        p = find_descriptor(descstart, desclen, after, USB_DT_CS_INTERFACE, iface, altsetting);
2979        while (p) {
2980                if (p[0] >= 3 && p[2] == dsubtype)
2981                        return p;
2982                p = find_descriptor(descstart, desclen, p, USB_DT_CS_INTERFACE, iface, altsetting);
2983        }
2984        return NULL;
2985}
2986
2987static void *find_audiocontrol_unit(void *descstart, unsigned int desclen, void *after, u8 unit, int iface)
2988{
2989        unsigned char *p;
2990
2991        p = find_descriptor(descstart, desclen, after, USB_DT_CS_INTERFACE, iface, -1);
2992        while (p) {
2993                if (p[0] >= 4 && p[2] >= INPUT_TERMINAL && p[2] <= EXTENSION_UNIT && p[3] == unit)
2994                        return p;
2995                p = find_descriptor(descstart, desclen, p, USB_DT_CS_INTERFACE, iface, -1);
2996        }
2997        return NULL;
2998}
2999
3000static void usb_audio_parsestreaming(struct usb_audio_state *s, unsigned char *buffer, unsigned int buflen, int asifin, int asifout)
3001{
3002        struct usb_device *dev = s->usbdev;
3003        struct usb_audiodev *as;
3004        struct usb_config_descriptor *config = dev->actconfig;
3005        struct usb_interface_descriptor *alts;
3006        struct usb_interface *iface;
3007        struct audioformat *fp;
3008        unsigned char *fmt, *csep;
3009        unsigned int i, j, k, format;
3010
3011        if (!(as = kmalloc(sizeof(struct usb_audiodev), GFP_KERNEL)))
3012                return;
3013        memset(as, 0, sizeof(struct usb_audiodev));
3014        init_waitqueue_head(&as->usbin.dma.wait);
3015        init_waitqueue_head(&as->usbout.dma.wait);
3016        spin_lock_init(&as->lock);
3017        spin_lock_init(&as->usbin.durb[0].urb.lock);
3018        spin_lock_init(&as->usbin.durb[1].urb.lock);
3019        spin_lock_init(&as->usbin.surb[0].urb.lock);
3020        spin_lock_init(&as->usbin.surb[1].urb.lock);
3021        spin_lock_init(&as->usbout.durb[0].urb.lock);
3022        spin_lock_init(&as->usbout.durb[1].urb.lock);
3023        spin_lock_init(&as->usbout.surb[0].urb.lock);
3024        spin_lock_init(&as->usbout.surb[1].urb.lock);
3025        as->state = s;
3026        as->usbin.interface = asifin;
3027        as->usbout.interface = asifout;
3028        /* search for input formats */
3029        if (asifin >= 0) {
3030                as->usbin.flags = FLG_CONNECTED;
3031                iface = &config->interface[asifin];
3032                for (i = 0; i < iface->num_altsetting; i++) {
3033                        alts = &iface->altsetting[i];
3034                        if (alts->bInterfaceClass != USB_CLASS_AUDIO || alts->bInterfaceSubClass != 2)
3035                                continue;
3036                        if (alts->bNumEndpoints < 1) {
3037                                if (i != 0) {  /* altsetting 0 has no endpoints (Section B.3.4.1) */
3038                                        printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u does not have an endpoint\n", 
3039                                               dev->devnum, asifin, i);
3040                                }
3041                                continue;
3042                        }
3043                        if ((alts->endpoint[0].bmAttributes & 0x03) != 0x01 ||
3044                            !(alts->endpoint[0].bEndpointAddress & 0x80)) {
3045                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u first endpoint not isochronous in\n", 
3046                                       dev->devnum, asifin, i);
3047                                continue;
3048                        }
3049                        fmt = find_csinterface_descriptor(buffer, buflen, NULL, AS_GENERAL, asifin, i);
3050                        if (!fmt) {
3051                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n", 
3052                                       dev->devnum, asifin, i);
3053                                continue;
3054                        }
3055                        if (fmt[0] < 7 || fmt[6] != 0 || (fmt[5] != 1 && fmt[5] != 2)) {
3056                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u format not supported\n", 
3057                                       dev->devnum, asifin, i);
3058                                continue;
3059                        }
3060                        format = (fmt[5] == 2) ? 
3061                          (AFMT_U32_LE | AFMT_U24_LE | AFMT_U16_LE | AFMT_U8) : 
3062                          (AFMT_S32_LE | AFMT_S24_LE | AFMT_S16_LE | AFMT_S8);
3063                        fmt = find_csinterface_descriptor(buffer, buflen, NULL, FORMAT_TYPE, asifin, i);
3064                        if (!fmt) {
3065                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n", 
3066                                       dev->devnum, asifin, i);
3067                                continue;
3068                        }
3069                        if (fmt[0] < 8+3*(fmt[7] ? fmt[7] : 2) || fmt[3] != 1) {
3070                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not supported\n", 
3071                                       dev->devnum, asifin, i);
3072                                continue;
3073                        }
3074                        if (fmt[4] < 1 || fmt[4] > MAXCHANNELS || fmt[5] < 1 || fmt[5] > 4) {
3075                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u unsupported channels %u framesize %u\n", 
3076                                       dev->devnum, asifin, i, fmt[4], fmt[5]);
3077                                continue;
3078                        }
3079                        csep = find_descriptor(buffer, buflen, NULL, USB_DT_CS_ENDPOINT, asifin, i);
3080                        if (!csep || csep[0] < 7 || csep[2] != EP_GENERAL) {
3081                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u no or invalid class specific endpoint descriptor\n", 
3082                                       dev->devnum, asifin, i);
3083                                continue;
3084                        }
3085                        if (as->numfmtin >= MAXFORMATS)
3086                                continue;
3087                        printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u channels %u framesize %u configured\n", 
3088                                       dev->devnum, asifin, i, fmt[4], fmt[5]);
3089                        fp = &as->fmtin[as->numfmtin++];
3090                        switch (fmt[5]) {
3091                        case 1:
3092                                format &= (AFMT_U8 | AFMT_S8);
3093                                break;
3094                        case 2:
3095                                format &= (AFMT_U16_LE | AFMT_S16_LE);
3096                                break;
3097                        case 3:
3098                                format &= (AFMT_U24_LE | AFMT_S24_LE);
3099                                break;
3100                        case 4:
3101                                format &= (AFMT_U32_LE | AFMT_S32_LE);
3102                                break;
3103                        }
3104                        
3105                        format |= (fmt[4]-1) << 24;
3106
3107                        fp->format = format;
3108                        fp->altsetting = i;
3109                        fp->sratelo = fp->sratehi = fmt[8] | (fmt[9] << 8) | (fmt[10] << 16);
3110                        printk(KERN_INFO "usbaudio: valid input sample rate %u\n", fp->sratelo);
3111                        for (j = fmt[7] ? (fmt[7]-1) : 1; j > 0; j--) {
3112                                k = fmt[8+3*j] | (fmt[9+3*j] << 8) | (fmt[10+3*j] << 16);
3113                                printk(KERN_INFO "usbaudio: valid input sample rate %u\n", k);
3114                                if (k > fp->sratehi)
3115                                        fp->sratehi = k;
3116                                if (k < fp->sratelo)
3117                                        fp->sratelo = k;
3118                        }
3119                        fp->attributes = csep[3];
3120                        printk(KERN_INFO "usbaudio: device %u interface %u altsetting %u: format 0x%08x sratelo %u sratehi %u attributes 0x%02x\n", 
3121                               dev->devnum, asifin, i, fp->format, fp->sratelo, fp->sratehi, fp->attributes);
3122                }
3123        }
3124        /* search for output formats */
3125        if (asifout >= 0) {
3126                as->usbout.flags = FLG_CONNECTED;
3127                iface = &config->interface[asifout];
3128                for (i = 0; i < iface->num_altsetting; i++) {
3129                        alts = &iface->altsetting[i];
3130                        if (alts->bInterfaceClass != USB_CLASS_AUDIO || alts->bInterfaceSubClass != 2)
3131                                continue;
3132                        if (alts->bNumEndpoints < 1) {
3133                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u does not have an endpoint\n", 
3134                                       dev->devnum, asifout, i);
3135                                continue;
3136                        }
3137                        if ((alts->endpoint[0].bmAttributes & 0x03) != 0x01 ||
3138                            (alts->endpoint[0].bEndpointAddress & 0x80)) {
3139                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u first endpoint not isochronous out\n", 
3140                                       dev->devnum, asifout, i);
3141                                continue;
3142                        }
3143                        /* See USB audio formats manual, section 2 */
3144                        fmt = find_csinterface_descriptor(buffer, buflen, NULL, AS_GENERAL, asifout, i);
3145                        if (!fmt) {
3146                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n", 
3147                                       dev->devnum, asifout, i);
3148                                continue;
3149                        }
3150                        if (fmt[0] < 7 || fmt[6] != 0 || (fmt[5] != 1 && fmt[5] != 2)) {
3151                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u format not supported\n", 
3152                                       dev->devnum, asifout, i);
3153                                continue;
3154                        }
3155                        format = (fmt[5] == 2) ? 
3156                          (AFMT_U32_LE | AFMT_U24_LE | AFMT_U16_LE | AFMT_U8) : 
3157                          (AFMT_S32_LE | AFMT_S24_LE | AFMT_S16_LE | AFMT_S8);
3158
3159                        /* Dallas DS4201 workaround */
3160                        if (dev->descriptor.idVendor == 0x04fa && dev->descriptor.idProduct == 0x4201)
3161                                format = (AFMT_S16_LE | AFMT_S8);
3162                        fmt = find_csinterface_descriptor(buffer, buflen, NULL, FORMAT_TYPE, asifout, i);
3163                        if (!fmt) {
3164                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n", 
3165                                       dev->devnum, asifout, i);
3166                                continue;
3167                        }
3168                        if (fmt[0] < 8+3*(fmt[7] ? fmt[7] : 2) || fmt[3] != 1) {
3169                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not supported\n", 
3170                                       dev->devnum, asifout, i);
3171                                continue;
3172                        }
3173                        if (fmt[4] < 1 || fmt[4] > MAXCHANNELS || fmt[5] < 1 || fmt[5] > 4) {
3174                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u unsupported channels %u framesize %u\n", 
3175                                       dev->devnum, asifout, i, fmt[4], fmt[5]);
3176                                continue;
3177                        }
3178                        csep = find_descriptor(buffer, buflen, NULL, USB_DT_CS_ENDPOINT, asifout, i);
3179                        if (!csep || csep[0] < 7 || csep[2] != EP_GENERAL) {
3180                                printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u no or invalid class specific endpoint descriptor\n", 
3181                                       dev->devnum, asifout, i);
3182                                continue;
3183                        }
3184                        if (as->numfmtout >= MAXFORMATS)
3185                                continue;
3186                        printk(KERN_ERR "usbaudio: device %u interface %u altsetting %u channels %u framesize %u configured\n", 
3187                               dev->devnum, asifout, i, fmt[4], fmt[5]);
3188                        fp = &as->fmtout[as->numfmtout++];
3189
3190                        switch (fmt[5]) {
3191                        case 1:
3192                                format &= (AFMT_U8 | AFMT_S8);
3193                                break;
3194                        case 2:
3195                                format &= (AFMT_U16_LE | AFMT_S16_LE);
3196                                break;
3197                        case 3:
3198                                format &= (AFMT_U24_LE | AFMT_S24_LE);
3199                                break;
3200                        case 4:
3201                                format &= (AFMT_U32_LE | AFMT_S32_LE);
3202                                break;
3203                        }
3204
3205                        format |= (fmt[4]-1) << 24;
3206
3207                        fp->format = format;
3208                        fp->altsetting = i;
3209                        fp->sratelo = fp->sratehi = fmt[8] | (fmt[9] << 8) | (fmt[10] << 16);
3210                        printk(KERN_INFO "usbaudio: valid output sample rate %u\n", fp->sratelo);
3211                        for (j = fmt[7] ? (fmt[7]-1) : 1; j > 0; j--) {
3212                                k = fmt[8+3*j] | (fmt[9+3*j] << 8) | (fmt[10+3*j] << 16);
3213                                printk(KERN_INFO "usbaudio: valid output sample rate %u\n", k);
3214                                if (k > fp->sratehi)
3215                                        fp->sratehi = k;
3216                                if (k < fp->sratelo)
3217                                        fp->sratelo = k;
3218                        }
3219                        fp->attributes = csep[3];
3220                        printk(KERN_INFO "usbaudio: device %u interface %u altsetting %u: format 0x%08x sratelo %u sratehi %u attributes 0x%02x\n", 
3221                               dev->devnum, asifout, i, fp->format, fp->sratelo, fp->sratehi, fp->attributes);
3222                }
3223        }
3224        if (as->numfmtin == 0 && as->numfmtout == 0) {
3225                kfree(as);
3226                return;
3227        }
3228        if ((as->dev_audio = register_sound_dsp(&usb_audio_fops, -1)) < 0) {
3229                printk(KERN_ERR "usbaudio: cannot register dsp\n");
3230                kfree(as);
3231                return;
3232        }
3233        printk(KERN_INFO "usbaudio: registered dsp 14,%d\n", as->dev_audio);
3234        /* everything successful */
3235        list_add_tail(&as->list, &s->audiolist);
3236}
3237
3238struct consmixstate {
3239        struct usb_audio_state *s;
3240        unsigned char *buffer;
3241        unsigned int buflen;
3242        unsigned int ctrlif;
3243        struct mixerchannel mixch[SOUND_MIXER_NRDEVICES];
3244        unsigned int nrmixch;
3245        unsigned int mixchmask;
3246        unsigned long unitbitmap[32/sizeof(unsigned long)];
3247        /* return values */
3248        unsigned int nrchannels;
3249        unsigned int termtype;
3250        unsigned int chconfig;
3251};
3252
3253static struct mixerchannel *getmixchannel(struct consmixstate *state, unsigned int nr)
3254{
3255        struct mixerchannel *c;
3256
3257        if (nr >= SOUND_MIXER_NRDEVICES) {
3258                printk(KERN_ERR "usbaudio: invalid OSS mixer channel %u\n", nr);
3259                return NULL;
3260        }
3261        if (!(state->mixchmask & (1 << nr))) {
3262                printk(KERN_WARNING "usbaudio: OSS mixer channel %u already in use\n", nr);
3263                return NULL;
3264        }
3265        c = &state->mixch[state->nrmixch++];
3266        c->osschannel = nr;
3267        state->mixchmask &= ~(1 << nr);
3268        return c;
3269}
3270
3271static unsigned int getvolchannel(struct consmixstate *state)
3272{
3273        unsigned int u;
3274
3275        if ((state->termtype & 0xff00) == 0x0000 && (state->mixchmask & SOUND_MASK_VOLUME))
3276                return SOUND_MIXER_VOLUME;
3277        if ((state->termtype & 0xff00) == 0x0100) {
3278                if (state->mixchmask & SOUND_MASK_PCM)
3279                        return SOUND_MIXER_PCM;
3280                if (state->mixchmask & SOUND_MASK_ALTPCM)
3281                        return SOUND_MIXER_ALTPCM;
3282        }
3283        if ((state->termtype & 0xff00) == 0x0200 && (state->mixchmask & SOUND_MASK_MIC))
3284                return SOUND_MIXER_MIC;
3285        if ((state->termtype & 0xff00) == 0x0300 && (state->mixchmask & SOUND_MASK_SPEAKER))
3286                return SOUND_MIXER_SPEAKER;
3287        if ((state->termtype & 0xff00) == 0x0500) {
3288                if (state->mixchmask & SOUND_MASK_PHONEIN)
3289                        return SOUND_MIXER_PHONEIN;
3290                if (state->mixchmask & SOUND_MASK_PHONEOUT)
3291                        return SOUND_MIXER_PHONEOUT;
3292        }
3293        if (state->termtype >= 0x710 && state->termtype <= 0x711 && (state->mixchmask & SOUND_MASK_RADIO))
3294                return SOUND_MIXER_RADIO;
3295        if (state->termtype >= 0x709 && state->termtype <= 0x70f && (state->mixchmask & SOUND_MASK_VIDEO))
3296                return SOUND_MIXER_VIDEO;
3297        u = ffs(state->mixchmask & (SOUND_MASK_LINE | SOUND_MASK_CD | SOUND_MASK_LINE1 | SOUND_MASK_LINE2 | SOUND_MASK_LINE3 |
3298                                    SOUND_MASK_DIGITAL1 | SOUND_MASK_DIGITAL2 | SOUND_MASK_DIGITAL3));
3299        return u-1;
3300}
3301
3302static void prepmixch(struct consmixstate *state)
3303{
3304        struct usb_device *dev = state->s->usbdev;
3305        struct mixerchannel *ch;
3306        unsigned char buf[2];
3307        __s16 v1;
3308        unsigned int v2, v3;
3309
3310        if (!state->nrmixch || state->nrmixch > SOUND_MIXER_NRDEVICES)
3311                return;
3312        ch = &state->mixch[state->nrmixch-1];
3313        switch (ch->selector) {
3314        case 0:  /* mixer unit request */
3315                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MIN, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3316                                    (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3317                        goto err;
3318                ch->minval = buf[0] | (buf[1] << 8);
3319                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MAX, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3320                                    (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3321                        goto err;
3322                ch->maxval = buf[0] | (buf[1] << 8);
3323                v2 = ch->maxval - ch->minval;
3324                if (!v2)
3325                        v2 = 1;
3326                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3327                                    (ch->chnum << 8) | 1, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3328                        goto err;
3329                v1 = buf[0] | (buf[1] << 8);
3330                v3 = v1 - ch->minval;
3331                v3 = 100 * v3 / v2;
3332                if (v3 > 100)
3333                        v3 = 100;
3334                ch->value = v3;
3335                if (ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)) {
3336                        if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3337                                            ((ch->chnum + !!(ch->flags & MIXFLG_STEREOIN)) << 8) | (1 + !!(ch->flags & MIXFLG_STEREOOUT)),
3338                                            state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3339                        goto err;
3340                        v1 = buf[0] | (buf[1] << 8);
3341                        v3 = v1 - ch->minval;
3342                        v3 = 100 * v3 / v2;
3343                        if (v3 > 100)
3344                                v3 = 100;
3345                }
3346                ch->value |= v3 << 8;
3347                break;
3348
3349                /* various feature unit controls */
3350        case VOLUME_CONTROL:
3351                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MIN, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3352                                    (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3353                        goto err;
3354                ch->minval = buf[0] | (buf[1] << 8);
3355                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MAX, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3356                                    (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3357                        goto err;
3358                ch->maxval = buf[0] | (buf[1] << 8);
3359                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3360                                    (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3361                        goto err;
3362                v1 = buf[0] | (buf[1] << 8);
3363                v2 = ch->maxval - ch->minval;
3364                v3 = v1 - ch->minval;
3365                if (!v2)
3366                        v2 = 1;
3367                v3 = 100 * v3 / v2;
3368                if (v3 > 100)
3369                        v3 = 100;
3370                ch->value = v3;
3371                if (ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)) {
3372                        if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3373                                            (ch->selector << 8) | (ch->chnum + 1), state->ctrlif | (ch->unitid << 8), buf, 2, HZ) < 0)
3374                                goto err;
3375                        v1 = buf[0] | (buf[1] << 8);
3376                        v3 = v1 - ch->minval;
3377                        v3 = 100 * v3 / v2;
3378                        if (v3 > 100)
3379                                v3 = 100;
3380                }
3381                ch->value |= v3 << 8;
3382                break;
3383                
3384        case BASS_CONTROL:
3385        case MID_CONTROL:
3386        case TREBLE_CONTROL:
3387                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MIN, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3388                                    (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
3389                        goto err;
3390                ch->minval = buf[0] << 8;
3391                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_MAX, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3392                                    (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
3393                        goto err;
3394                ch->maxval = buf[0] << 8;
3395                if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3396                                    (ch->selector << 8) | ch->chnum, state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
3397                        goto err;
3398                v1 = buf[0] << 8;
3399                v2 = ch->maxval - ch->minval;
3400                v3 = v1 - ch->minval;
3401                if (!v2)
3402                        v2 = 1;
3403                v3 = 100 * v3 / v2;
3404                if (v3 > 100)
3405                        v3 = 100;
3406                ch->value = v3;
3407                if (ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)) {
3408                        if (usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
3409                                            (ch->selector << 8) | (ch->chnum + 1), state->ctrlif | (ch->unitid << 8), buf, 1, HZ) < 0)
3410                                goto err;
3411                        v1 = buf[0] << 8;
3412                        v3 = v1 - ch->minval;
3413                        v3 = 100 * v3 / v2;
3414                        if (v3 > 100)
3415                                v3 = 100;
3416                }
3417                ch->value |= v3 << 8;
3418                break;
3419                
3420        default:
3421                goto err;
3422        }
3423        return;
3424
3425 err:
3426        printk(KERN_ERR "usbaudio: mixer request device %u if %u unit %u ch %u selector %u failed\n", 
3427               dev->devnum, state->ctrlif, ch->unitid, ch->chnum, ch->selector);
3428        if (state->nrmixch)
3429                state->nrmixch--;
3430}
3431
3432
3433static void usb_audio_recurseunit(struct consmixstate *state, unsigned char unitid);
3434
3435static inline int checkmixbmap(unsigned char *bmap, unsigned char flg, unsigned int inidx, unsigned int numoch)
3436{
3437        unsigned int idx;
3438
3439        idx = inidx*numoch;
3440        if (!(bmap[-(idx >> 3)] & (0x80 >> (idx & 7))))
3441                return 0;
3442        if (!(flg & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
3443                return 1;
3444        idx = (inidx+!!(flg & MIXFLG_STEREOIN))*numoch+!!(flg & MIXFLG_STEREOOUT);
3445        if (!(bmap[-(idx >> 3)] & (0x80 >> (idx & 7))))
3446                return 0;
3447        return 1;
3448}
3449
3450static void usb_audio_mixerunit(struct consmixstate *state, unsigned char *mixer)
3451{
3452        unsigned int nroutch = mixer[5+mixer[4]];
3453        unsigned int chidx[SOUND_MIXER_NRDEVICES+1];
3454        unsigned int termt[SOUND_MIXER_NRDEVICES];
3455        unsigned char flg = (nroutch >= 2) ? MIXFLG_STEREOOUT : 0;
3456        unsigned char *bmap = &mixer[9+mixer[4]];
3457        unsigned int bmapsize;
3458        struct mixerchannel *ch;
3459        unsigned int i;
3460
3461        if (!mixer[4]) {
3462                printk(KERN_ERR "usbaudio: unit %u invalid MIXER_UNIT descriptor\n", mixer[3]);
3463                return;
3464        }
3465        if (mixer[4] > SOUND_MIXER_NRDEVICES) {
3466                printk(KERN_ERR "usbaudio: mixer unit %u: too many input pins\n", mixer[3]);
3467                return;
3468        }
3469        chidx[0] = 0;
3470        for (i = 0; i < mixer[4]; i++) {
3471                usb_audio_recurseunit(state, mixer[5+i]);
3472                chidx[i+1] = chidx[i] + state->nrchannels;
3473                termt[i] = state->termtype;
3474        }
3475        state->termtype = 0;
3476        state->chconfig = mixer[6+mixer[4]] | (mixer[7+mixer[4]] << 8);
3477        bmapsize = (nroutch * chidx[mixer[4]] + 7) >> 3;
3478        bmap += bmapsize - 1;
3479        if (mixer[0] < 10+mixer[4]+bmapsize) {
3480                printk(KERN_ERR "usbaudio: unit %u invalid MIXER_UNIT descriptor (bitmap too small)\n", mixer[3]);
3481                return;
3482        }
3483        for (i = 0; i < mixer[4]; i++) {
3484                state->termtype = termt[i];
3485                if (chidx[i+1]-chidx[i] >= 2) {
3486                        flg |= MIXFLG_STEREOIN;
3487                        if (checkmixbmap(bmap, flg, chidx[i], nroutch)) {
3488                                ch = getmixchannel(state, getvolchannel(state));
3489                                if (ch) {
3490                                        ch->unitid = mixer[3];
3491                                        ch->selector = 0;
3492                                        ch->chnum = chidx[i]+1;
3493                                        ch->flags = flg;
3494                                        prepmixch(state);
3495                                }
3496                                continue;
3497                        }
3498                }
3499                flg &= ~MIXFLG_STEREOIN;
3500                if (checkmixbmap(bmap, flg, chidx[i], nroutch)) {
3501                        ch = getmixchannel(state, getvolchannel(state));
3502                        if (ch) {
3503                                ch->unitid = mixer[3];
3504                                ch->selector = 0;
3505                                ch->chnum = chidx[i]+1;
3506                                ch->flags = flg;
3507                                prepmixch(state);
3508                        }
3509                }
3510        }       
3511        state->termtype = 0;
3512}
3513
3514static struct mixerchannel *slctsrc_findunit(struct consmixstate *state, __u8 unitid)
3515{
3516        unsigned int i;
3517        
3518        for (i = 0; i < state->nrmixch; i++)
3519                if (state->mixch[i].unitid == unitid)
3520                        return &state->mixch[i];
3521        return NULL;
3522}
3523
3524static void usb_audio_selectorunit(struct consmixstate *state, unsigned char *selector)
3525{
3526        unsigned int chnum, i, mixch;
3527        struct mixerchannel *mch;
3528
3529        if (!selector[4]) {
3530                printk(KERN_ERR "usbaudio: unit %u invalid SELECTOR_UNIT descriptor\n", selector[3]);
3531                return;
3532        }
3533        mixch = state->nrmixch;
3534        usb_audio_recurseunit(state, selector[5]);
3535        if (state->nrmixch != mixch) {
3536                mch = &state->mixch[state->nrmixch-1];
3537                mch->slctunitid = selector[3] | (1 << 8);
3538        } else if ((mch = slctsrc_findunit(state, selector[5]))) {
3539                mch->slctunitid = selector[3] | (1 << 8);
3540        } else {
3541                printk(KERN_INFO "usbaudio: selector unit %u: ignoring channel 1\n", selector[3]);
3542        }
3543        chnum = state->nrchannels;
3544        for (i = 1; i < selector[4]; i++) {
3545                mixch = state->nrmixch;
3546                usb_audio_recurseunit(state, selector[5+i]);
3547                if (chnum != state->nrchannels) {
3548                        printk(KERN_ERR "usbaudio: selector unit %u: input pins with varying channel numbers\n", selector[3]);
3549                        state->termtype = 0;
3550                        state->chconfig = 0;
3551                        state->nrchannels = 0;
3552                        return;
3553                }
3554                if (state->nrmixch != mixch) {
3555                        mch = &state->mixch[state->nrmixch-1];
3556                        mch->slctunitid = selector[3] | ((i + 1) << 8);
3557                } else if ((mch = slctsrc_findunit(state, selector[5+i]))) {
3558                        mch->slctunitid = selector[3] | ((i + 1) << 8);
3559                } else {
3560                        printk(KERN_INFO "usbaudio: selector unit %u: ignoring channel %u\n", selector[3], i+1);
3561                }
3562        }
3563        state->termtype = 0;
3564        state->chconfig = 0;
3565}
3566
3567/* in the future we might try to handle 3D etc. effect units */
3568
3569static void usb_audio_processingunit(struct consmixstate *state, unsigned char *proc)
3570{
3571        unsigned int i;
3572
3573        for (i = 0; i < proc[6]; i++)
3574                usb_audio_recurseunit(state, proc[7+i]);
3575        state->nrchannels = proc[7+proc[6]];
3576        state->termtype = 0;
3577        state->chconfig = proc[8+proc[6]] | (proc[9+proc[6]] << 8);
3578}
3579
3580
3581/* See Audio Class Spec, section 4.3.2.5 */
3582static void usb_audio_featureunit(struct consmixstate *state, unsigned char *ftr)
3583{
3584        struct mixerchannel *ch;
3585        unsigned short chftr, mchftr;
3586#if 0
3587        struct usb_device *dev = state->s->usbdev;
3588        unsigned char data[1];
3589#endif
3590        unsigned char nr_logical_channels, i;
3591
3592        usb_audio_recurseunit(state, ftr[4]);
3593
3594        if (ftr[5] == 0 ) {
3595                printk(KERN_ERR "usbaudio: wrong controls size in feature unit %u\n",ftr[3]);
3596                return;
3597        }
3598
3599        if (state->nrchannels == 0) {
3600                printk(KERN_ERR "usbaudio: feature unit %u source has no channels\n", ftr[3]);
3601                return;
3602        }
3603        if (state->nrchannels > 2)
3604                printk(KERN_WARNING "usbaudio: feature unit %u: OSS mixer interface does not support more than 2 channels\n", ftr[3]);
3605
3606        nr_logical_channels=(ftr[0]-7)/ftr[5]-1;
3607
3608        if (nr_logical_channels != state->nrchannels) {
3609                printk(KERN_WARNING "usbaudio: warning: found %d of %d logical channels.\n", state->nrchannels,nr_logical_channels);
3610
3611                if (state->nrchannels == 1 && nr_logical_channels==0) {
3612                        printk(KERN_INFO "usbaudio: assuming the channel found is the master channel (got a Philips camera?). Should be fine.\n");
3613                } else if (state->nrchannels == 1 && nr_logical_channels==2) {
3614                        printk(KERN_INFO "usbaudio: assuming that a stereo channel connected directly to a mixer is missing in search (got Labtec headset?). Should be fine.\n");
3615                        state->nrchannels=nr_logical_channels;
3616                } else {
3617                        printk(KERN_WARNING "usbaudio: no idea what's going on..., contact linux-usb-devel@lists.sourceforge.net\n");
3618                }
3619        }
3620
3621        /* There is always a master channel */
3622        mchftr = ftr[6];
3623        /* Binary AND over logical channels if they exist */
3624        if (nr_logical_channels) {
3625                chftr = ftr[6+ftr[5]];
3626                for (i = 2; i <= nr_logical_channels; i++)
3627                        chftr &= ftr[6+i*ftr[5]];
3628        } else {
3629                chftr = 0;
3630        }
3631
3632        /* volume control */
3633        if (chftr & 2) {
3634                ch = getmixchannel(state, getvolchannel(state));
3635                if (ch) {
3636                        ch->unitid = ftr[3];
3637                        ch->selector = VOLUME_CONTROL;
3638                        ch->chnum = 1;
3639                        ch->flags = (state->nrchannels > 1) ? (MIXFLG_STEREOIN | MIXFLG_STEREOOUT) : 0;
3640                        prepmixch(state);
3641                }
3642        } else if (mchftr & 2) {
3643                ch = getmixchannel(state, getvolchannel(state));
3644                if (ch) {
3645                        ch->unitid = ftr[3];
3646                        ch->selector = VOLUME_CONTROL;
3647                        ch->chnum = 0;
3648                        ch->flags = 0;
3649                        prepmixch(state);
3650                }
3651        }
3652        /* bass control */
3653        if (chftr & 4) {
3654                ch = getmixchannel(state, SOUND_MIXER_BASS);
3655                if (ch) {
3656                        ch->unitid = ftr[3];
3657                        ch->selector = BASS_CONTROL;
3658                        ch->chnum = 1;
3659                        ch->flags = (state->nrchannels > 1) ? (MIXFLG_STEREOIN | MIXFLG_STEREOOUT) : 0;
3660                        prepmixch(state);
3661                }
3662        } else if (mchftr & 4) {
3663                ch = getmixchannel(state, SOUND_MIXER_BASS);
3664                if (ch) {
3665                        ch->unitid = ftr[3];
3666                        ch->selector = BASS_CONTROL;
3667                        ch->chnum = 0;
3668                        ch->flags = 0;
3669                        prepmixch(state);
3670                }
3671        }
3672        /* treble control */
3673        if (chftr & 16) {
3674                ch = getmixchannel(state, SOUND_MIXER_TREBLE);
3675                if (ch) {
3676                        ch->unitid = ftr[3];
3677                        ch->selector = TREBLE_CONTROL;
3678                        ch->chnum = 1;
3679                        ch->flags = (state->nrchannels > 1) ? (MIXFLG_STEREOIN | MIXFLG_STEREOOUT) : 0;
3680                        prepmixch(state);
3681                }
3682        } else if (mchftr & 16) {
3683                ch = getmixchannel(state, SOUND_MIXER_TREBLE);
3684                if (ch) {
3685                        ch->unitid = ftr[3];
3686                        ch->selector = TREBLE_CONTROL;
3687                        ch->chnum = 0;
3688                        ch->flags = 0;
3689                        prepmixch(state);
3690                }
3691        }
3692#if 0
3693        /* if there are mute controls, unmute them */
3694        /* does not seem to be necessary, and the Dallas chip does not seem to support the "all" channel (255) */
3695        if ((chftr & 1) || (mchftr & 1)) {
3696                printk(KERN_DEBUG "usbaudio: unmuting feature unit %u interface %u\n", ftr[3], state->ctrlif);
3697                data[0] = 0;
3698                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
3699                                    (MUTE_CONTROL << 8) | 0xff, state->ctrlif | (ftr[3] << 8), data, 1, HZ) < 0)
3700                        printk(KERN_WARNING "usbaudio: failure to unmute feature unit %u interface %u\n", ftr[3], state->ctrlif);
3701        }
3702#endif
3703}
3704
3705static void usb_audio_recurseunit(struct consmixstate *state, unsigned char unitid)
3706{
3707        unsigned char *p1;
3708        unsigned int i, j;
3709
3710        if (test_and_set_bit(unitid, &state->unitbitmap)) {
3711                printk(KERN_INFO "usbaudio: mixer path revisits unit %d\n", unitid);
3712                return;
3713        }
3714        p1 = find_audiocontrol_unit(state->buffer, state->buflen, NULL, unitid, state->ctrlif);
3715        if (!p1) {
3716                printk(KERN_ERR "usbaudio: unit %d not found!\n", unitid);
3717                return;
3718        }
3719        state->nrchannels = 0;
3720        state->termtype = 0;
3721        state->chconfig = 0;
3722        switch (p1[2]) {
3723        case INPUT_TERMINAL:
3724                if (p1[0] < 12) {
3725                        printk(KERN_ERR "usbaudio: unit %u: invalid INPUT_TERMINAL descriptor\n", unitid);
3726                        return;
3727                }
3728                state->nrchannels = p1[7];
3729                state->termtype = p1[4] | (p1[5] << 8);
3730                state->chconfig = p1[8] | (p1[9] << 8);
3731                return;
3732
3733        case MIXER_UNIT:
3734                if (p1[0] < 10 || p1[0] < 10+p1[4]) {
3735                        printk(KERN_ERR "usbaudio: unit %u: invalid MIXER_UNIT descriptor\n", unitid);
3736                        return;
3737                }
3738                usb_audio_mixerunit(state, p1);
3739                return;
3740
3741        case SELECTOR_UNIT:
3742                if (p1[0] < 6 || p1[0] < 6+p1[4]) {
3743                        printk(KERN_ERR "usbaudio: unit %u: invalid SELECTOR_UNIT descriptor\n", unitid);
3744                        return;
3745                }
3746                usb_audio_selectorunit(state, p1);
3747                return;
3748
3749        case FEATURE_UNIT: /* See USB Audio Class Spec 4.3.2.5 */
3750                if (p1[0] < 7 || p1[0] < 7+p1[5]) {
3751                        printk(KERN_ERR "usbaudio: unit %u: invalid FEATURE_UNIT descriptor\n", unitid);
3752                        return;
3753                }
3754                usb_audio_featureunit(state, p1);
3755                return;         
3756
3757        case PROCESSING_UNIT:
3758                if (p1[0] < 13 || p1[0] < 13+p1[6] || p1[0] < 13+p1[6]+p1[11+p1[6]] || p1[0] < 13+p1[6]+p1[11+p1[6]]+p1[13+p1[6]+p1[11+p1[6]]]) {
3759                        printk(KERN_ERR "usbaudio: unit %u: invalid PROCESSING_UNIT descriptor\n", unitid);
3760                        return;
3761                }
3762                usb_audio_processingunit(state, p1);
3763                return;         
3764
3765        case EXTENSION_UNIT:
3766                if (p1[0] < 13 || p1[0] < 13+p1[6] || p1[0] < 13+p1[6]+p1[11+p1[6]]) {
3767                        printk(KERN_ERR "usbaudio: unit %u: invalid EXTENSION_UNIT descriptor\n", unitid);
3768                        return;
3769                }
3770                for (j = i = 0; i < p1[6]; i++) {
3771                        usb_audio_recurseunit(state, p1[7+i]);
3772                        if (!i)
3773                                j = state->termtype;
3774                        else if (j != state->termtype)
3775                                j = 0;
3776                }
3777                state->nrchannels = p1[7+p1[6]];
3778                state->chconfig = p1[8+p1[6]] | (p1[9+p1[6]] << 8);
3779                state->termtype = j;
3780                return;
3781
3782        default:
3783                printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]);
3784                return;
3785        }
3786}
3787
3788static void usb_audio_constructmixer(struct usb_audio_state *s, unsigned char *buffer, unsigned int buflen, unsigned int ctrlif, unsigned char *oterm)
3789{
3790        struct usb_mixerdev *ms;
3791        struct consmixstate state;
3792
3793        memset(&state, 0, sizeof(state));
3794        state.s = s;
3795        state.nrmixch = 0;
3796        state.mixchmask = ~0;
3797        state.buffer = buffer;
3798        state.buflen = buflen;
3799        state.ctrlif = ctrlif;
3800        set_bit(oterm[3], &state.unitbitmap);  /* mark terminal ID as visited */
3801        printk(KERN_DEBUG "usbaudio: constructing mixer for Terminal %u type 0x%04x\n",
3802               oterm[3], oterm[4] | (oterm[5] << 8));
3803        usb_audio_recurseunit(&state, oterm[7]);
3804        if (!state.nrmixch) {
3805                printk(KERN_INFO "usbaudio: no mixer controls found for Terminal %u\n", oterm[3]);
3806                return;
3807        }
3808        if (!(ms = kmalloc(sizeof(struct usb_mixerdev)+state.nrmixch*sizeof(struct mixerchannel), GFP_KERNEL)))
3809                return;
3810        memset(ms, 0, sizeof(struct usb_mixerdev));
3811        memcpy(&ms->ch, &state.mixch, state.nrmixch*sizeof(struct mixerchannel));
3812        ms->state = s;
3813        ms->iface = ctrlif;
3814        ms->numch = state.nrmixch;
3815        if ((ms->dev_mixer = register_sound_mixer(&usb_mixer_fops, -1)) < 0) {
3816                printk(KERN_ERR "usbaudio: cannot register mixer\n");
3817                kfree(ms);
3818                return;
3819        }
3820        printk(KERN_INFO "usbaudio: registered mixer 14,%d\n", ms->dev_mixer);
3821        list_add_tail(&ms->list, &s->mixerlist);
3822}
3823
3824static void *usb_audio_parsecontrol(struct usb_device *dev, unsigned char *buffer, unsigned int buflen, unsigned int ctrlif)
3825{
3826        struct usb_audio_state *s;
3827        struct usb_config_descriptor *config = dev->actconfig;
3828        struct usb_interface *iface;
3829        unsigned char ifin[USB_MAXINTERFACES], ifout[USB_MAXINTERFACES];
3830        unsigned char *p1;
3831        unsigned int i, j, k, numifin = 0, numifout = 0;
3832        
3833        if (!(s = kmalloc(sizeof(struct usb_audio_state), GFP_KERNEL)))
3834                return NULL;
3835        memset(s, 0, sizeof(struct usb_audio_state));
3836        INIT_LIST_HEAD(&s->audiolist);
3837        INIT_LIST_HEAD(&s->mixerlist);
3838        s->usbdev = dev;
3839        s->count = 1;
3840
3841        /* find audiocontrol interface */
3842        if (!(p1 = find_csinterface_descriptor(buffer, buflen, NULL, HEADER, ctrlif, -1))) {
3843                printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u no HEADER found\n",
3844                       dev->devnum, ctrlif);
3845                goto ret;
3846        }
3847        if (p1[0] < 8 + p1[7]) {
3848                printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u HEADER error\n",
3849                       dev->devnum, ctrlif);
3850                goto ret;
3851        }
3852        if (!p1[7])
3853                printk(KERN_INFO "usbaudio: device %d audiocontrol interface %u has no AudioStreaming and MidiStreaming interfaces\n",
3854                       dev->devnum, ctrlif);
3855        for (i = 0; i < p1[7]; i++) {
3856                j = p1[8+i];
3857                if (j >= config->bNumInterfaces) {
3858                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u interface %u does not exist\n",
3859                               dev->devnum, ctrlif, j);
3860                        continue;
3861                }
3862                iface = &config->interface[j];
3863                if (iface->altsetting[0].bInterfaceClass != USB_CLASS_AUDIO) {
3864                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u interface %u is not an AudioClass interface\n",
3865                               dev->devnum, ctrlif, j);
3866                        continue;
3867                }
3868                if (iface->altsetting[0].bInterfaceSubClass == 3) {
3869                        printk(KERN_INFO "usbaudio: device %d audiocontrol interface %u interface %u MIDIStreaming not supported\n",
3870                               dev->devnum, ctrlif, j);
3871                        continue;
3872                }
3873                if (iface->altsetting[0].bInterfaceSubClass != 2) {
3874                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u interface %u invalid AudioClass subtype\n",
3875                               dev->devnum, ctrlif, j);
3876                        continue;
3877                }
3878                if (iface->num_altsetting == 0) {
3879                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u has no working interface.\n", dev->devnum, ctrlif);
3880                        continue;
3881                }
3882                if (iface->num_altsetting == 1) {
3883                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u has only 1 altsetting.\n", dev->devnum, ctrlif);
3884                        continue;
3885                }
3886                if (iface->altsetting[0].bNumEndpoints > 0) {
3887                        /* Check all endpoints; should they all have a bandwidth of 0 ? */
3888                        for (k = 0; k < iface->altsetting[0].bNumEndpoints; k++) {
3889                                if (iface->altsetting[0].endpoint[k].wMaxPacketSize > 0) {
3890                                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u endpoint %d does not have 0 bandwidth at alt[0]\n", dev->devnum, ctrlif, k);
3891                                        break;
3892                                }
3893                        }
3894                        if (k < iface->altsetting[0].bNumEndpoints)
3895                                continue;
3896                }
3897                if (iface->altsetting[1].bNumEndpoints < 1) {
3898                        printk(KERN_ERR "usbaudio: device %d audiocontrol interface %u interface %u has no endpoint\n",
3899                               dev->devnum, ctrlif, j);
3900                        continue;
3901                }
3902                /* note: this requires the data endpoint to be ep0 and the optional sync
3903                   ep to be ep1, which seems to be the case */
3904                if (iface->altsetting[1].endpoint[0].bEndpointAddress & USB_DIR_IN) {
3905                        if (numifin < USB_MAXINTERFACES) {
3906                                ifin[numifin++] = j;
3907                                usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1);
3908                        }
3909                } else {
3910                        if (numifout < USB_MAXINTERFACES) {
3911                                ifout[numifout++] = j;
3912                                usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1);
3913                        }
3914                }
3915        }
3916        printk(KERN_INFO "usbaudio: device %d audiocontrol interface %u has %u input and %u output AudioStreaming interfaces\n",
3917               dev->devnum, ctrlif, numifin, numifout);
3918        for (i = 0; i < numifin && i < numifout; i++)
3919                usb_audio_parsestreaming(s, buffer, buflen, ifin[i], ifout[i]);
3920        for (j = i; j < numifin; j++)
3921                usb_audio_parsestreaming(s, buffer, buflen, ifin[i], -1);
3922        for (j = i; j < numifout; j++)
3923                usb_audio_parsestreaming(s, buffer, buflen, -1, ifout[i]);
3924        /* now walk through all OUTPUT_TERMINAL descriptors to search for mixers */
3925        p1 = find_csinterface_descriptor(buffer, buflen, NULL, OUTPUT_TERMINAL, ctrlif, -1);
3926        while (p1) {
3927                if (p1[0] >= 9)
3928                        usb_audio_constructmixer(s, buffer, buflen, ctrlif, p1);
3929                p1 = find_csinterface_descriptor(buffer, buflen, p1, OUTPUT_TERMINAL, ctrlif, -1);
3930        }
3931
3932ret:
3933        if (list_empty(&s->audiolist) && list_empty(&s->mixerlist)) {
3934                kfree(s);
3935                return NULL;
3936        }
3937        /* everything successful */
3938        down(&open_sem);
3939        list_add_tail(&s->audiodev, &audiodevs);
3940        up(&open_sem);
3941        printk(KERN_DEBUG "usb_audio_parsecontrol: usb_audio_state at %p\n", s);
3942        return s;
3943}
3944
3945/* we only care for the currently active configuration */
3946
3947static void *usb_audio_probe(struct usb_device *dev, unsigned int ifnum,
3948                             const struct usb_device_id *id)
3949{
3950        struct usb_config_descriptor *config = dev->actconfig;  
3951        unsigned char *buffer;
3952        unsigned char buf[8];
3953        unsigned int i, buflen;
3954        int ret;
3955
3956#if 0
3957        printk(KERN_DEBUG "usbaudio: Probing if %i: IC %x, ISC %x\n", ifnum,
3958               config->interface[ifnum].altsetting[0].bInterfaceClass,
3959               config->interface[ifnum].altsetting[0].bInterfaceSubClass);
3960#endif
3961
3962        /*
3963         * audiocontrol interface found
3964         * find which configuration number is active
3965         */
3966        i = dev->actconfig - config;
3967
3968        if (usb_set_configuration(dev, config->bConfigurationValue) < 0) {
3969                printk(KERN_ERR "usbaudio: set_configuration failed (ConfigValue 0x%x)\n", config->bConfigurationValue);
3970                return NULL;
3971        }
3972        ret = usb_get_descriptor(dev, USB_DT_CONFIG, i, buf, 8);
3973        if (ret < 0) {
3974                printk(KERN_ERR "usbaudio: cannot get first 8 bytes of config descriptor %d of device %d (error %d)\n", i, dev->devnum, ret);
3975                return NULL;
3976        }
3977        if (buf[1] != USB_DT_CONFIG || buf[0] < 9) {
3978                printk(KERN_ERR "usbaudio: invalid config descriptor %d of device %d\n", i, dev->devnum);
3979                return NULL;
3980        }
3981        buflen = buf[2] | (buf[3] << 8);
3982        if (!(buffer = kmalloc(buflen, GFP_KERNEL)))
3983                return NULL;
3984        ret = usb_get_descriptor(dev, USB_DT_CONFIG, i, buffer, buflen);
3985        if (ret < 0) {
3986                kfree(buffer);
3987                printk(KERN_ERR "usbaudio: cannot get config descriptor %d of device %d (error %d)\n", i, dev->devnum, ret);
3988                return NULL;
3989        }
3990        return usb_audio_parsecontrol(dev, buffer, buflen, ifnum);
3991}
3992
3993
3994/* a revoke facility would make things simpler */
3995
3996static void usb_audio_disconnect(struct usb_device *dev, void *ptr)
3997{
3998        struct usb_audio_state *s = (struct usb_audio_state *)ptr;
3999        struct list_head *list;
4000        struct usb_audiodev *as;
4001        struct usb_mixerdev *ms;
4002
4003        /* we get called with -1 for every audiostreaming interface registered */
4004        if (s == (struct usb_audio_state *)-1) {
4005                dprintk((KERN_DEBUG "usbaudio: note, usb_audio_disconnect called with -1\n"));
4006                return;
4007        }
4008        if (!s->usbdev) {
4009                dprintk((KERN_DEBUG "usbaudio: error,  usb_audio_disconnect already called for %p!\n", s));
4010                return;
4011        }
4012        down(&open_sem);
4013        list_del(&s->audiodev);
4014        INIT_LIST_HEAD(&s->audiodev);
4015        s->usbdev = NULL;
4016        /* deregister all audio and mixer devices, so no new processes can open this device */
4017        for(list = s->audiolist.next; list != &s->audiolist; list = list->next) {
4018                as = list_entry(list, struct usb_audiodev, list);
4019                usbin_disc(as);
4020                usbout_disc(as);
4021                wake_up(&as->usbin.dma.wait);
4022                wake_up(&as->usbout.dma.wait);
4023                if (as->dev_audio >= 0) {
4024                        unregister_sound_dsp(as->dev_audio);
4025                        printk(KERN_INFO "usbaudio: unregister dsp 14,%d\n", as->dev_audio);
4026                }
4027                as->dev_audio = -1;
4028        }
4029        for(list = s->mixerlist.next; list != &s->mixerlist; list = list->next) {
4030                ms = list_entry(list, struct usb_mixerdev, list);
4031                if (ms->dev_mixer >= 0) {
4032                        unregister_sound_mixer(ms->dev_mixer);
4033                        printk(KERN_INFO "usbaudio: unregister mixer 14,%d\n", ms->dev_mixer);
4034                }
4035                ms->dev_mixer = -1;
4036        }
4037        release(s);
4038        wake_up(&open_wait);
4039}
4040
4041static int __init usb_audio_init(void)
4042{
4043        usb_register(&usb_audio_driver);
4044        info(DRIVER_VERSION ":" DRIVER_DESC);
4045        return 0;
4046}
4047
4048
4049static void __exit usb_audio_cleanup(void)
4050{
4051        usb_deregister(&usb_audio_driver);
4052}
4053
4054module_init(usb_audio_init);
4055module_exit(usb_audio_cleanup);
4056
4057MODULE_AUTHOR( DRIVER_AUTHOR );
4058MODULE_DESCRIPTION( DRIVER_DESC );
4059MODULE_LICENSE("GPL");
4060
4061
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.