audio.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:119k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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