au1000.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:57k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *      au1000.c  --  Sound driver for Alchemy Au1000 MIPS Internet Edge
  3.  *                    Processor.
  4.  *
  5.  * Copyright 2001 MontaVista Software Inc.
  6.  * Author: MontaVista Software, Inc.
  7.  *          stevel@mvista.com or source@mvista.com
  8.  *
  9.  *  This program is free software; you can redistribute  it and/or modify it
  10.  *  under  the terms of  the GNU General  Public License as published by the
  11.  *  Free Software Foundation;  either version 2 of the  License, or (at your
  12.  *  option) any later version.
  13.  *
  14.  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
  15.  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
  16.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
  17.  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
  18.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  19.  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
  20.  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  21.  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
  22.  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  23.  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24.  *
  25.  *  You should have received a copy of the  GNU General Public License along
  26.  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  27.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  28.  *
  29.  *
  30.  * Module command line parameters:
  31.  *
  32.  *  Supported devices:
  33.  *  /dev/dsp    standard OSS /dev/dsp device
  34.  *  /dev/mixer  standard OSS /dev/mixer device
  35.  *
  36.  * Notes:
  37.  *
  38.  *  1. Much of the OSS buffer allocation, ioctl's, and mmap'ing are
  39.  *     taken, slightly modified or not at all, from the ES1371 driver,
  40.  *     so refer to the credits in es1371.c for those. The rest of the
  41.  *     code (probe, open, read, write, the ISR, etc.) is new.
  42.  *
  43.  *  Revision history
  44.  *    06.27.2001  Initial version
  45.  *    03.20.2002  Added mutex locks around read/write methods, to prevent
  46.  *                simultaneous access on SMP or preemptible kernels. Also
  47.  *                removed the counter/pointer fragment aligning at the end
  48.  *                of read/write methods [stevel].
  49.  *    03.21.2002  Add support for coherent DMA on the audio read/write DMA
  50.  *                channels [stevel].
  51.  *
  52.  */
  53. #include <linux/version.h>
  54. #include <linux/module.h>
  55. #include <linux/string.h>
  56. #include <linux/ioport.h>
  57. #include <linux/sched.h>
  58. #include <linux/delay.h>
  59. #include <linux/sound.h>
  60. #include <linux/slab.h>
  61. #include <linux/soundcard.h>
  62. #include <linux/init.h>
  63. #include <linux/poll.h>
  64. #include <linux/pci.h>
  65. #include <linux/bitops.h>
  66. #include <linux/proc_fs.h>
  67. #include <linux/spinlock.h>
  68. #include <linux/smp_lock.h>
  69. #include <linux/ac97_codec.h>
  70. #include <linux/wrapper.h>
  71. #include <asm/io.h>
  72. #include <asm/uaccess.h>
  73. #include <asm/hardirq.h>
  74. #include <asm/au1000.h>
  75. #include <asm/au1000_dma.h>
  76. /* --------------------------------------------------------------------- */
  77. #undef OSS_DOCUMENTED_MIXER_SEMANTICS
  78. #define AU1000_DEBUG
  79. #undef AU1000_VERBOSE_DEBUG
  80. #define USE_COHERENT_DMA
  81. #define AU1000_MODULE_NAME "Au1000 audio"
  82. #define PFX AU1000_MODULE_NAME
  83. #ifdef AU1000_DEBUG
  84. #define dbg(format, arg...) printk(KERN_DEBUG PFX ": " format "n" , ## arg)
  85. #else
  86. #define dbg(format, arg...) do {} while (0)
  87. #endif
  88. #define err(format, arg...) printk(KERN_ERR PFX ": " format "n" , ## arg)
  89. #define info(format, arg...) printk(KERN_INFO PFX ": " format "n" , ## arg)
  90. #define warn(format, arg...) printk(KERN_WARNING PFX ": " format "n" , ## arg)
  91. /* misc stuff */
  92. #define POLL_COUNT   0x5000
  93. #define AC97_EXT_DACS (AC97_EXTID_SDAC | AC97_EXTID_CDAC | AC97_EXTID_LDAC)
  94. /* Boot options */
  95. static int      vra = 0; // 0 = no VRA, 1 = use VRA if codec supports it
  96. MODULE_PARM(vra, "i");
  97. MODULE_PARM_DESC(vra, "if 1 use VRA if codec supports it");
  98. /* --------------------------------------------------------------------- */
  99. struct au1000_state {
  100. /* soundcore stuff */
  101. int             dev_audio;
  102. #ifdef AU1000_DEBUG
  103. /* debug /proc entry */
  104. struct proc_dir_entry *ps;
  105. struct proc_dir_entry *ac97_ps;
  106. #endif /* AU1000_DEBUG */
  107. struct ac97_codec codec;
  108. unsigned        codec_base_caps;// AC'97 reg 00h, "Reset Register"
  109. unsigned        codec_ext_caps; // AC'97 reg 28h, "Extended Audio ID"
  110. int             no_vra; // do not use VRA
  111. spinlock_t      lock;
  112. struct semaphore open_sem;
  113. struct semaphore sem;
  114. mode_t          open_mode;
  115. wait_queue_head_t open_wait;
  116. struct dmabuf {
  117. unsigned int    dmanr; // DMA Channel number
  118. unsigned        sample_rate; // Hz
  119. unsigned src_factor;     // SRC interp/decimation (no vra)
  120. unsigned        sample_size; // 8 or 16
  121. int             num_channels; // 1 = mono, 2 = stereo, 4, 6
  122. int dma_bytes_per_sample;// DMA bytes per audio sample frame
  123. int user_bytes_per_sample;// User bytes per audio sample frame
  124. int cnt_factor;          // user-to-DMA bytes per audio
  125. //  sample frame
  126. void           *rawbuf;
  127. dma_addr_t      dmaaddr;
  128. unsigned        buforder;
  129. unsigned numfrag;        // # of DMA fragments in DMA buffer
  130. unsigned        fragshift;
  131. void           *nextIn; // ptr to next-in to DMA buffer
  132. void           *nextOut;// ptr to next-out from DMA buffer
  133. int             count; // current byte count in DMA buffer
  134. unsigned        total_bytes; // total bytes written or read
  135. unsigned        error; // over/underrun
  136. wait_queue_head_t wait;
  137. /* redundant, but makes calculations easier */
  138. unsigned fragsize;       // user perception of fragment size
  139. unsigned dma_fragsize;   // DMA (real) fragment size
  140. unsigned dmasize;        // Total DMA buffer size
  141. //   (mult. of DMA fragsize)
  142. /* OSS stuff */
  143. unsigned        mapped:1;
  144. unsigned        ready:1;
  145. unsigned        stopped:1;
  146. unsigned        ossfragshift;
  147. int             ossmaxfrags;
  148. unsigned        subdivision;
  149. } dma_dac      , dma_adc;
  150. } au1000_state;
  151. /* --------------------------------------------------------------------- */
  152. static inline unsigned ld2(unsigned int x)
  153. {
  154. unsigned        r = 0;
  155. if (x >= 0x10000) {
  156. x >>= 16;
  157. r += 16;
  158. }
  159. if (x >= 0x100) {
  160. x >>= 8;
  161. r += 8;
  162. }
  163. if (x >= 0x10) {
  164. x >>= 4;
  165. r += 4;
  166. }
  167. if (x >= 4) {
  168. x >>= 2;
  169. r += 2;
  170. }
  171. if (x >= 2)
  172. r++;
  173. return r;
  174. }
  175. #ifdef USE_COHERENT_DMA
  176. static inline void * dma_alloc(size_t size, dma_addr_t * dma_handle)
  177. {
  178. void* ret = (void *)__get_free_pages(GFP_ATOMIC | GFP_DMA,
  179.      get_order(size));
  180. if (ret != NULL) {
  181. memset(ret, 0, size);
  182. *dma_handle = virt_to_phys(ret);
  183. }
  184. return ret;
  185. }
  186. static inline void dma_free(size_t size, void* va, dma_addr_t dma_handle)
  187. {
  188. free_pages((unsigned long)va, get_order(size));
  189. }
  190. #else
  191. static inline void * dma_alloc(size_t size, dma_addr_t * dma_handle)
  192. {
  193. return pci_alloc_consistent(NULL, size, dma_handle);
  194. }
  195. static inline void dma_free(size_t size, void* va, dma_addr_t dma_handle)
  196. {
  197. pci_free_consistent(NULL, size, va, dma_handle);
  198. }
  199. #endif
  200. /* --------------------------------------------------------------------- */
  201. static void au1000_delay(int msec)
  202. {
  203. unsigned long   tmo;
  204. signed long     tmo2;
  205. if (in_interrupt())
  206. return;
  207. tmo = jiffies + (msec * HZ) / 1000;
  208. for (;;) {
  209. tmo2 = tmo - jiffies;
  210. if (tmo2 <= 0)
  211. break;
  212. schedule_timeout(tmo2);
  213. }
  214. }
  215. /* --------------------------------------------------------------------- */
  216. static u16 rdcodec(struct ac97_codec *codec, u8 addr)
  217. {
  218. struct au1000_state *s = (struct au1000_state *)codec->private_data;
  219. unsigned long   flags;
  220. u32             cmd;
  221. u16             data;
  222. int             i;
  223. spin_lock_irqsave(&s->lock, flags);
  224. for (i = 0; i < POLL_COUNT; i++)
  225. if (!(au_readl(AC97C_STATUS) & AC97C_CP))
  226. break;
  227. if (i == POLL_COUNT)
  228. err("rdcodec: codec cmd pending expired!");
  229. cmd = (u32) addr & AC97C_INDEX_MASK;
  230. cmd |= AC97C_READ; // read command
  231. au_writel(cmd, AC97C_CMD);
  232. /* now wait for the data */
  233. for (i = 0; i < POLL_COUNT; i++)
  234. if (!(au_readl(AC97C_STATUS) & AC97C_CP))
  235. break;
  236. if (i == POLL_COUNT) {
  237. err("rdcodec: read poll expired!");
  238. return 0;
  239. }
  240. data = au_readl(AC97C_CMD) & 0xffff;
  241. spin_unlock_irqrestore(&s->lock, flags);
  242. return data;
  243. }
  244. static void wrcodec(struct ac97_codec *codec, u8 addr, u16 data)
  245. {
  246. struct au1000_state *s = (struct au1000_state *)codec->private_data;
  247. unsigned long   flags;
  248. u32             cmd;
  249. int             i;
  250. spin_lock_irqsave(&s->lock, flags);
  251. for (i = 0; i < POLL_COUNT; i++)
  252. if (!(au_readl(AC97C_STATUS) & AC97C_CP))
  253. break;
  254. if (i == POLL_COUNT)
  255. err("wrcodec: codec cmd pending expired!");
  256. cmd = (u32) addr & AC97C_INDEX_MASK;
  257. cmd &= ~AC97C_READ; // write command
  258. cmd |= ((u32) data << AC97C_WD_BIT); // OR in the data word
  259. au_writel(cmd, AC97C_CMD);
  260. spin_unlock_irqrestore(&s->lock, flags);
  261. }
  262. static void waitcodec(struct ac97_codec *codec)
  263. {
  264. u16             temp;
  265. int             i;
  266. /* codec_wait is used to wait for a ready state after
  267.    an AC97C_RESET. */
  268. au1000_delay(10);
  269. // first poll the CODEC_READY tag bit
  270. for (i = 0; i < POLL_COUNT; i++)
  271. if (au_readl(AC97C_STATUS) & AC97C_READY)
  272. break;
  273. if (i == POLL_COUNT) {
  274. err("waitcodec: CODEC_READY poll expired!");
  275. return;
  276. }
  277. // get AC'97 powerdown control/status register
  278. temp = rdcodec(codec, AC97_POWER_CONTROL);
  279. // If anything is powered down, power'em up
  280. if (temp & 0x7f00) {
  281. // Power on
  282. wrcodec(codec, AC97_POWER_CONTROL, 0);
  283. au1000_delay(100);
  284. // Reread
  285. temp = rdcodec(codec, AC97_POWER_CONTROL);
  286. }
  287.     
  288. // Check if Codec REF,ANL,DAC,ADC ready
  289. if ((temp & 0x7f0f) != 0x000f)
  290. err("codec reg 26 status (0x%x) not ready!!", temp);
  291. }
  292. /* --------------------------------------------------------------------- */
  293. /* stop the ADC before calling */
  294. static void set_adc_rate(struct au1000_state *s, unsigned rate)
  295. {
  296. struct dmabuf  *adc = &s->dma_adc;
  297. struct dmabuf  *dac = &s->dma_dac;
  298. unsigned        adc_rate, dac_rate;
  299. u16             ac97_extstat;
  300. if (s->no_vra) {
  301. // calc SRC factor
  302. adc->src_factor = ((96000 / rate) + 1) >> 1;
  303. adc->sample_rate = 48000 / adc->src_factor;
  304. return;
  305. }
  306. adc->src_factor = 1;
  307. ac97_extstat = rdcodec(&s->codec, AC97_EXTENDED_STATUS);
  308. rate = rate > 48000 ? 48000 : rate;
  309. // enable VRA
  310. wrcodec(&s->codec, AC97_EXTENDED_STATUS,
  311. ac97_extstat | AC97_EXTSTAT_VRA);
  312. // now write the sample rate
  313. wrcodec(&s->codec, AC97_PCM_LR_ADC_RATE, (u16) rate);
  314. // read it back for actual supported rate
  315. adc_rate = rdcodec(&s->codec, AC97_PCM_LR_ADC_RATE);
  316. #ifdef AU1000_VERBOSE_DEBUG
  317. dbg(__FUNCTION__ ": set to %d Hz", adc_rate);
  318. #endif
  319. // some codec's don't allow unequal DAC and ADC rates, in which case
  320. // writing one rate reg actually changes both.
  321. dac_rate = rdcodec(&s->codec, AC97_PCM_FRONT_DAC_RATE);
  322. if (dac->num_channels > 2)
  323. wrcodec(&s->codec, AC97_PCM_SURR_DAC_RATE, dac_rate);
  324. if (dac->num_channels > 4)
  325. wrcodec(&s->codec, AC97_PCM_LFE_DAC_RATE, dac_rate);
  326. adc->sample_rate = adc_rate;
  327. dac->sample_rate = dac_rate;
  328. }
  329. /* stop the DAC before calling */
  330. static void set_dac_rate(struct au1000_state *s, unsigned rate)
  331. {
  332. struct dmabuf  *dac = &s->dma_dac;
  333. struct dmabuf  *adc = &s->dma_adc;
  334. unsigned        adc_rate, dac_rate;
  335. u16             ac97_extstat;
  336. if (s->no_vra) {
  337. // calc SRC factor
  338. dac->src_factor = ((96000 / rate) + 1) >> 1;
  339. dac->sample_rate = 48000 / dac->src_factor;
  340. return;
  341. }
  342. dac->src_factor = 1;
  343. ac97_extstat = rdcodec(&s->codec, AC97_EXTENDED_STATUS);
  344. rate = rate > 48000 ? 48000 : rate;
  345. // enable VRA
  346. wrcodec(&s->codec, AC97_EXTENDED_STATUS,
  347. ac97_extstat | AC97_EXTSTAT_VRA);
  348. // now write the sample rate
  349. wrcodec(&s->codec, AC97_PCM_FRONT_DAC_RATE, (u16) rate);
  350. // I don't support different sample rates for multichannel,
  351. // so make these channels the same.
  352. if (dac->num_channels > 2)
  353. wrcodec(&s->codec, AC97_PCM_SURR_DAC_RATE, (u16) rate);
  354. if (dac->num_channels > 4)
  355. wrcodec(&s->codec, AC97_PCM_LFE_DAC_RATE, (u16) rate);
  356. // read it back for actual supported rate
  357. dac_rate = rdcodec(&s->codec, AC97_PCM_FRONT_DAC_RATE);
  358. #ifdef AU1000_VERBOSE_DEBUG
  359. dbg(__FUNCTION__ ": set to %d Hz", dac_rate);
  360. #endif
  361. // some codec's don't allow unequal DAC and ADC rates, in which case
  362. // writing one rate reg actually changes both.
  363. adc_rate = rdcodec(&s->codec, AC97_PCM_LR_ADC_RATE);
  364. dac->sample_rate = dac_rate;
  365. adc->sample_rate = adc_rate;
  366. }
  367. static void stop_dac(struct au1000_state *s)
  368. {
  369. struct dmabuf  *db = &s->dma_dac;
  370. unsigned long   flags;
  371. if (db->stopped)
  372. return;
  373. spin_lock_irqsave(&s->lock, flags);
  374. disable_dma(db->dmanr);
  375. db->stopped = 1;
  376. spin_unlock_irqrestore(&s->lock, flags);
  377. }
  378. static void  stop_adc(struct au1000_state *s)
  379. {
  380. struct dmabuf  *db = &s->dma_adc;
  381. unsigned long   flags;
  382. if (db->stopped)
  383. return;
  384. spin_lock_irqsave(&s->lock, flags);
  385. disable_dma(db->dmanr);
  386. db->stopped = 1;
  387. spin_unlock_irqrestore(&s->lock, flags);
  388. }
  389. static void set_xmit_slots(int num_channels)
  390. {
  391. u32 ac97_config = au_readl(AC97C_CONFIG) & ~AC97C_XMIT_SLOTS_MASK;
  392. switch (num_channels) {
  393. case 1: // mono
  394. case 2: // stereo, slots 3,4
  395. ac97_config |= (0x3 << AC97C_XMIT_SLOTS_BIT);
  396. break;
  397. case 4: // stereo with surround, slots 3,4,7,8
  398. ac97_config |= (0x33 << AC97C_XMIT_SLOTS_BIT);
  399. break;
  400. case 6: // stereo with surround and center/LFE, slots 3,4,6,7,8,9
  401. ac97_config |= (0x7b << AC97C_XMIT_SLOTS_BIT);
  402. break;
  403. }
  404. au_writel(ac97_config, AC97C_CONFIG);
  405. }
  406. static void     set_recv_slots(int num_channels)
  407. {
  408. u32 ac97_config = au_readl(AC97C_CONFIG) & ~AC97C_RECV_SLOTS_MASK;
  409. /*
  410.  * Always enable slots 3 and 4 (stereo). Slot 6 is
  411.  * optional Mic ADC, which I don't support yet.
  412.  */
  413. ac97_config |= (0x3 << AC97C_RECV_SLOTS_BIT);
  414. au_writel(ac97_config, AC97C_CONFIG);
  415. }
  416. static void start_dac(struct au1000_state *s)
  417. {
  418. struct dmabuf  *db = &s->dma_dac;
  419. unsigned long   flags;
  420. unsigned long   buf1, buf2;
  421. if (!db->stopped)
  422. return;
  423. spin_lock_irqsave(&s->lock, flags);
  424. au_readl(AC97C_STATUS); // read status to clear sticky bits
  425. // reset Buffer 1 and 2 pointers to nextOut and nextOut+dma_fragsize
  426. buf1 = virt_to_phys(db->nextOut);
  427. buf2 = buf1 + db->dma_fragsize;
  428. if (buf2 >= db->dmaaddr + db->dmasize)
  429. buf2 -= db->dmasize;
  430. set_xmit_slots(db->num_channels);
  431. init_dma(db->dmanr);
  432. if (get_dma_active_buffer(db->dmanr) == 0) {
  433. clear_dma_done0(db->dmanr); // clear DMA done bit
  434. set_dma_addr0(db->dmanr, buf1);
  435. set_dma_addr1(db->dmanr, buf2);
  436. } else {
  437. clear_dma_done1(db->dmanr); // clear DMA done bit
  438. set_dma_addr1(db->dmanr, buf1);
  439. set_dma_addr0(db->dmanr, buf2);
  440. }
  441. set_dma_count(db->dmanr, db->dma_fragsize>>1);
  442. enable_dma_buffers(db->dmanr);
  443. start_dma(db->dmanr);
  444. #ifdef AU1000_VERBOSE_DEBUG
  445. dump_au1000_dma_channel(db->dmanr);
  446. #endif
  447. db->stopped = 0;
  448. spin_unlock_irqrestore(&s->lock, flags);
  449. }
  450. static void start_adc(struct au1000_state *s)
  451. {
  452. struct dmabuf  *db = &s->dma_adc;
  453. unsigned long   flags;
  454. unsigned long   buf1, buf2;
  455. if (!db->stopped)
  456. return;
  457. spin_lock_irqsave(&s->lock, flags);
  458. au_readl(AC97C_STATUS); // read status to clear sticky bits
  459. // reset Buffer 1 and 2 pointers to nextIn and nextIn+dma_fragsize
  460. buf1 = virt_to_phys(db->nextIn);
  461. buf2 = buf1 + db->dma_fragsize;
  462. if (buf2 >= db->dmaaddr + db->dmasize)
  463. buf2 -= db->dmasize;
  464. set_recv_slots(db->num_channels);
  465. init_dma(db->dmanr);
  466. if (get_dma_active_buffer(db->dmanr) == 0) {
  467. clear_dma_done0(db->dmanr); // clear DMA done bit
  468. set_dma_addr0(db->dmanr, buf1);
  469. set_dma_addr1(db->dmanr, buf2);
  470. } else {
  471. clear_dma_done1(db->dmanr); // clear DMA done bit
  472. set_dma_addr1(db->dmanr, buf1);
  473. set_dma_addr0(db->dmanr, buf2);
  474. }
  475. set_dma_count(db->dmanr, db->dma_fragsize>>1);
  476. enable_dma_buffers(db->dmanr);
  477. start_dma(db->dmanr);
  478. #ifdef AU1000_VERBOSE_DEBUG
  479. dump_au1000_dma_channel(db->dmanr);
  480. #endif
  481. db->stopped = 0;
  482. spin_unlock_irqrestore(&s->lock, flags);
  483. }
  484. /* --------------------------------------------------------------------- */
  485. #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT)
  486. #define DMABUF_MINORDER 1
  487. extern inline void dealloc_dmabuf(struct au1000_state *s, struct dmabuf *db)
  488. {
  489. struct page    *page, *pend;
  490. if (db->rawbuf) {
  491. /* undo marking the pages as reserved */
  492. pend = virt_to_page(db->rawbuf +
  493.     (PAGE_SIZE << db->buforder) - 1);
  494. for (page = virt_to_page(db->rawbuf); page <= pend; page++)
  495. mem_map_unreserve(page);
  496. dma_free(PAGE_SIZE << db->buforder, db->rawbuf, db->dmaaddr);
  497. }
  498. db->rawbuf = db->nextIn = db->nextOut = NULL;
  499. db->mapped = db->ready = 0;
  500. }
  501. static int prog_dmabuf(struct au1000_state *s, struct dmabuf *db)
  502. {
  503. int             order;
  504. unsigned user_bytes_per_sec;
  505. unsigned        bufs;
  506. struct page    *page, *pend;
  507. unsigned        rate = db->sample_rate;
  508. if (!db->rawbuf) {
  509. db->ready = db->mapped = 0;
  510. for (order = DMABUF_DEFAULTORDER;
  511.      order >= DMABUF_MINORDER; order--)
  512. if ((db->rawbuf = dma_alloc(PAGE_SIZE << order,
  513.   &db->dmaaddr)))
  514. break;
  515. if (!db->rawbuf)
  516. return -ENOMEM;
  517. db->buforder = order;
  518. /* now mark the pages as reserved;
  519.    otherwise remap_page_range doesn't do what we want */
  520. pend = virt_to_page(db->rawbuf +
  521.     (PAGE_SIZE << db->buforder) - 1);
  522. for (page = virt_to_page(db->rawbuf); page <= pend; page++)
  523. mem_map_reserve(page);
  524. }
  525. db->cnt_factor = 1;
  526. if (db->sample_size == 8)
  527. db->cnt_factor *= 2;
  528. if (db->num_channels == 1)
  529. db->cnt_factor *= 2;
  530. db->cnt_factor *= db->src_factor;
  531. db->count = 0;
  532. db->nextIn = db->nextOut = db->rawbuf;
  533. db->user_bytes_per_sample = (db->sample_size>>3) * db->num_channels;
  534. db->dma_bytes_per_sample = 2 * ((db->num_channels == 1) ?
  535. 2 : db->num_channels);
  536. user_bytes_per_sec = rate * db->user_bytes_per_sample;
  537. bufs = PAGE_SIZE << db->buforder;
  538. if (db->ossfragshift) {
  539. if ((1000 << db->ossfragshift) < user_bytes_per_sec)
  540. db->fragshift = ld2(user_bytes_per_sec/1000);
  541. else
  542. db->fragshift = db->ossfragshift;
  543. } else {
  544. db->fragshift = ld2(user_bytes_per_sec / 100 /
  545.     (db->subdivision ? db->subdivision : 1));
  546. if (db->fragshift < 3)
  547. db->fragshift = 3;
  548. }
  549. db->fragsize = 1 << db->fragshift;
  550. db->dma_fragsize = db->fragsize * db->cnt_factor;
  551. db->numfrag = bufs / db->dma_fragsize;
  552. while (db->numfrag < 4 && db->fragshift > 3) {
  553. db->fragshift--;
  554. db->fragsize = 1 << db->fragshift;
  555. db->dma_fragsize = db->fragsize * db->cnt_factor;
  556. db->numfrag = bufs / db->dma_fragsize;
  557. }
  558. if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
  559. db->numfrag = db->ossmaxfrags;
  560. db->dmasize = db->dma_fragsize * db->numfrag;
  561. memset(db->rawbuf, 0, bufs);
  562. #ifdef AU1000_VERBOSE_DEBUG
  563. dbg("rate=%d, samplesize=%d, channels=%d",
  564.     rate, db->sample_size, db->num_channels);
  565. dbg("fragsize=%d, cnt_factor=%d, dma_fragsize=%d",
  566.     db->fragsize, db->cnt_factor, db->dma_fragsize);
  567. dbg("numfrag=%d, dmasize=%d", db->numfrag, db->dmasize);
  568. #endif
  569. db->ready = 1;
  570. return 0;
  571. }
  572. extern inline int prog_dmabuf_adc(struct au1000_state *s)
  573. {
  574. stop_adc(s);
  575. return prog_dmabuf(s, &s->dma_adc);
  576. }
  577. extern inline int prog_dmabuf_dac(struct au1000_state *s)
  578. {
  579. stop_dac(s);
  580. return prog_dmabuf(s, &s->dma_dac);
  581. }
  582. /* hold spinlock for the following */
  583. static void dac_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  584. {
  585. struct au1000_state *s = (struct au1000_state *) dev_id;
  586. struct dmabuf  *dac = &s->dma_dac;
  587. unsigned long   newptr;
  588. u32 ac97c_stat, buff_done;
  589. ac97c_stat = au_readl(AC97C_STATUS);
  590. #ifdef AU1000_VERBOSE_DEBUG
  591. if (ac97c_stat & (AC97C_XU | AC97C_XO | AC97C_TE))
  592. dbg("AC97C status = 0x%08x", ac97c_stat);
  593. #endif
  594. if ((buff_done = get_dma_buffer_done(dac->dmanr)) == 0) {
  595. /* fastpath out, to ease interrupt sharing */
  596. return;
  597. }
  598. spin_lock(&s->lock);
  599. if (buff_done != (DMA_D0 | DMA_D1)) {
  600. dac->nextOut += dac->dma_fragsize;
  601. if (dac->nextOut >= dac->rawbuf + dac->dmasize)
  602. dac->nextOut -= dac->dmasize;
  603. /* update playback pointers */
  604. newptr = virt_to_phys(dac->nextOut) + dac->dma_fragsize;
  605. if (newptr >= dac->dmaaddr + dac->dmasize)
  606. newptr -= dac->dmasize;
  607. dac->count -= dac->dma_fragsize;
  608. dac->total_bytes += dac->dma_fragsize;
  609. if (dac->count <= 0) {
  610. #ifdef AU1000_VERBOSE_DEBUG
  611. dbg("dac underrun");
  612. #endif
  613. spin_unlock(&s->lock);
  614. stop_dac(s);
  615. spin_lock(&s->lock);
  616. dac->count = 0;
  617. dac->nextIn = dac->nextOut;
  618. } else if (buff_done == DMA_D0) {
  619. clear_dma_done0(dac->dmanr); // clear DMA done bit
  620. set_dma_count0(dac->dmanr, dac->dma_fragsize>>1);
  621. set_dma_addr0(dac->dmanr, newptr);
  622. enable_dma_buffer0(dac->dmanr); // reenable
  623. } else {
  624. clear_dma_done1(dac->dmanr); // clear DMA done bit
  625. set_dma_count1(dac->dmanr, dac->dma_fragsize>>1);
  626. set_dma_addr1(dac->dmanr, newptr);
  627. enable_dma_buffer1(dac->dmanr); // reenable
  628. }
  629. } else {
  630. // both done bits set, we missed an interrupt
  631. spin_unlock(&s->lock);
  632. stop_dac(s);
  633. spin_lock(&s->lock);
  634. dac->nextOut += 2*dac->dma_fragsize;
  635. if (dac->nextOut >= dac->rawbuf + dac->dmasize)
  636. dac->nextOut -= dac->dmasize;
  637. dac->count -= 2*dac->dma_fragsize;
  638. dac->total_bytes += 2*dac->dma_fragsize;
  639. if (dac->count > 0) {
  640. spin_unlock(&s->lock);
  641. start_dac(s);
  642. spin_lock(&s->lock);
  643. }
  644. }
  645. /* wake up anybody listening */
  646. if (waitqueue_active(&dac->wait))
  647. wake_up(&dac->wait);
  648. spin_unlock(&s->lock);
  649. }
  650. static void adc_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  651. {
  652. struct au1000_state *s = (struct au1000_state *) dev_id;
  653. struct dmabuf  *adc = &s->dma_adc;
  654. unsigned long   newptr;
  655. u32 ac97c_stat, buff_done;
  656. ac97c_stat = au_readl(AC97C_STATUS);
  657. #ifdef AU1000_VERBOSE_DEBUG
  658. if (ac97c_stat & (AC97C_RU | AC97C_RO))
  659. dbg("AC97C status = 0x%08x", ac97c_stat);
  660. #endif
  661. if ((buff_done = get_dma_buffer_done(adc->dmanr)) == 0) {
  662. /* fastpath out, to ease interrupt sharing */
  663. return;
  664. }
  665. spin_lock(&s->lock);
  666. if (buff_done != (DMA_D0 | DMA_D1)) {
  667. if (adc->count + adc->dma_fragsize > adc->dmasize) {
  668. // Overrun. Stop ADC and log the error
  669. spin_unlock(&s->lock);
  670. stop_adc(s);
  671. adc->error++;
  672. err("adc overrun");
  673. return;
  674. }
  675. adc->nextIn += adc->dma_fragsize;
  676. if (adc->nextIn >= adc->rawbuf + adc->dmasize)
  677. adc->nextIn -= adc->dmasize;
  678. /* update capture pointers */
  679. newptr = virt_to_phys(adc->nextIn) + adc->dma_fragsize;
  680. if (newptr >= adc->dmaaddr + adc->dmasize)
  681. newptr -= adc->dmasize;
  682. adc->count += adc->dma_fragsize;
  683. adc->total_bytes += adc->dma_fragsize;
  684. if (buff_done == DMA_D0) {
  685. clear_dma_done0(adc->dmanr); // clear DMA done bit
  686. set_dma_count0(adc->dmanr, adc->dma_fragsize>>1);
  687. set_dma_addr0(adc->dmanr, newptr);
  688. enable_dma_buffer0(adc->dmanr); // reenable
  689. } else {
  690. clear_dma_done1(adc->dmanr); // clear DMA done bit
  691. set_dma_count1(adc->dmanr, adc->dma_fragsize>>1);
  692. set_dma_addr1(adc->dmanr, newptr);
  693. enable_dma_buffer1(adc->dmanr); // reenable
  694. }
  695. } else {
  696. // both done bits set, we missed an interrupt
  697. spin_unlock(&s->lock);
  698. stop_adc(s);
  699. spin_lock(&s->lock);
  700. if (adc->count + 2*adc->dma_fragsize > adc->dmasize) {
  701. // Overrun. Log the error
  702. adc->error++;
  703. err("adc overrun");
  704. spin_unlock(&s->lock);
  705. return;
  706. }
  707. adc->nextIn += 2*adc->dma_fragsize;
  708. if (adc->nextIn >= adc->rawbuf + adc->dmasize)
  709. adc->nextIn -= adc->dmasize;
  710. adc->count += 2*adc->dma_fragsize;
  711. adc->total_bytes += 2*adc->dma_fragsize;
  712. spin_unlock(&s->lock);
  713. start_adc(s);
  714. spin_lock(&s->lock);
  715. }
  716. /* wake up anybody listening */
  717. if (waitqueue_active(&adc->wait))
  718. wake_up(&adc->wait);
  719. spin_unlock(&s->lock);
  720. }
  721. /* --------------------------------------------------------------------- */
  722. static loff_t au1000_llseek(struct file *file, loff_t offset, int origin)
  723. {
  724. return -ESPIPE;
  725. }
  726. static int au1000_open_mixdev(struct inode *inode, struct file *file)
  727. {
  728. file->private_data = &au1000_state;
  729. return 0;
  730. }
  731. static int au1000_release_mixdev(struct inode *inode, struct file *file)
  732. {
  733. return 0;
  734. }
  735. static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd,
  736.                         unsigned long arg)
  737. {
  738. return codec->mixer_ioctl(codec, cmd, arg);
  739. }
  740. static int au1000_ioctl_mixdev(struct inode *inode, struct file *file,
  741.        unsigned int cmd, unsigned long arg)
  742. {
  743. struct au1000_state *s = (struct au1000_state *)file->private_data;
  744. struct ac97_codec *codec = &s->codec;
  745. return mixdev_ioctl(codec, cmd, arg);
  746. }
  747. static /*const */ struct file_operations au1000_mixer_fops = {
  748. owner:THIS_MODULE,
  749. llseek:au1000_llseek,
  750. ioctl:au1000_ioctl_mixdev,
  751. open:au1000_open_mixdev,
  752. release:au1000_release_mixdev,
  753. };
  754. /* --------------------------------------------------------------------- */
  755. static int drain_dac(struct au1000_state *s, int nonblock)
  756. {
  757. unsigned long   flags;
  758. int             count, tmo;
  759. if (s->dma_dac.mapped || !s->dma_dac.ready || s->dma_dac.stopped)
  760. return 0;
  761. for (;;) {
  762. spin_lock_irqsave(&s->lock, flags);
  763. count = s->dma_dac.count;
  764. spin_unlock_irqrestore(&s->lock, flags);
  765. if (count <= 0)
  766. break;
  767. if (signal_pending(current))
  768. break;
  769. if (nonblock)
  770. return -EBUSY;
  771. tmo = 1000 * count / (s->no_vra ?
  772.       48000 : s->dma_dac.sample_rate);
  773. tmo /= s->dma_dac.dma_bytes_per_sample;
  774. au1000_delay(tmo);
  775. }
  776. if (signal_pending(current))
  777. return -ERESTARTSYS;
  778. return 0;
  779. }
  780. /* --------------------------------------------------------------------- */
  781. static inline u8 S16_TO_U8(s16 ch)
  782. {
  783. return (u8) (ch >> 8) + 0x80;
  784. }
  785. static inline s16 U8_TO_S16(u8 ch)
  786. {
  787. return (s16) (ch - 0x80) << 8;
  788. }
  789. /*
  790.  * Translates user samples to dma buffer suitable for AC'97 DAC data:
  791.  *     If mono, copy left channel to right channel in dma buffer.
  792.  *     If 8 bit samples, cvt to 16-bit before writing to dma buffer.
  793.  *     If interpolating (no VRA), duplicate every audio frame src_factor times.
  794.  */
  795. static int translate_from_user(struct dmabuf *db,
  796.        char* dmabuf,
  797.        char* userbuf,
  798.        int dmacount)
  799. {
  800. int             sample, i;
  801. int             interp_bytes_per_sample;
  802. int             num_samples;
  803. int             mono = (db->num_channels == 1);
  804. char            usersample[12];
  805. s16             ch, dmasample[6];
  806. if (db->sample_size == 16 && !mono && db->src_factor == 1) {
  807. // no translation necessary, just copy
  808. if (copy_from_user(dmabuf, userbuf, dmacount))
  809. return -EFAULT;
  810. return dmacount;
  811. }
  812. interp_bytes_per_sample = db->dma_bytes_per_sample * db->src_factor;
  813. num_samples = dmacount / interp_bytes_per_sample;
  814. for (sample = 0; sample < num_samples; sample++) {
  815. if (copy_from_user(usersample, userbuf,
  816.    db->user_bytes_per_sample)) {
  817. dbg(__FUNCTION__ ": fault");
  818. return -EFAULT;
  819. }
  820. for (i = 0; i < db->num_channels; i++) {
  821. if (db->sample_size == 8)
  822. ch = U8_TO_S16(usersample[i]);
  823. else
  824. ch = *((s16 *) (&usersample[i * 2]));
  825. dmasample[i] = ch;
  826. if (mono)
  827. dmasample[i + 1] = ch; // right channel
  828. }
  829. // duplicate every audio frame src_factor times
  830. for (i = 0; i < db->src_factor; i++)
  831. memcpy(dmabuf, dmasample, db->dma_bytes_per_sample);
  832. userbuf += db->user_bytes_per_sample;
  833. dmabuf += interp_bytes_per_sample;
  834. }
  835. return num_samples * interp_bytes_per_sample;
  836. }
  837. /*
  838.  * Translates AC'97 ADC samples to user buffer:
  839.  *     If mono, send only left channel to user buffer.
  840.  *     If 8 bit samples, cvt from 16 to 8 bit before writing to user buffer.
  841.  *     If decimating (no VRA), skip over src_factor audio frames.
  842.  */
  843. static int translate_to_user(struct dmabuf *db,
  844.      char* userbuf,
  845.      char* dmabuf,
  846.      int dmacount)
  847. {
  848. int             sample, i;
  849. int             interp_bytes_per_sample;
  850. int             num_samples;
  851. int             mono = (db->num_channels == 1);
  852. char            usersample[12];
  853. if (db->sample_size == 16 && !mono && db->src_factor == 1) {
  854. // no translation necessary, just copy
  855. if (copy_to_user(userbuf, dmabuf, dmacount))
  856. return -EFAULT;
  857. return dmacount;
  858. }
  859. interp_bytes_per_sample = db->dma_bytes_per_sample * db->src_factor;
  860. num_samples = dmacount / interp_bytes_per_sample;
  861. for (sample = 0; sample < num_samples; sample++) {
  862. for (i = 0; i < db->num_channels; i++) {
  863. if (db->sample_size == 8)
  864. usersample[i] =
  865. S16_TO_U8(*((s16 *) (&dmabuf[i * 2])));
  866. else
  867. *((s16 *) (&usersample[i * 2])) =
  868. *((s16 *) (&dmabuf[i * 2]));
  869. }
  870. if (copy_to_user(userbuf, usersample,
  871.  db->user_bytes_per_sample)) {
  872. dbg(__FUNCTION__ ": fault");
  873. return -EFAULT;
  874. }
  875. userbuf += db->user_bytes_per_sample;
  876. dmabuf += interp_bytes_per_sample;
  877. }
  878. return num_samples * interp_bytes_per_sample;
  879. }
  880. /*
  881.  * Copy audio data to/from user buffer from/to dma buffer, taking care
  882.  * that we wrap when reading/writing the dma buffer. Returns actual byte
  883.  * count written to or read from the dma buffer.
  884.  */
  885. static int copy_dmabuf_user(struct dmabuf *db, char* userbuf,
  886.     int count, int to_user)
  887. {
  888. char           *bufptr = to_user ? db->nextOut : db->nextIn;
  889. char           *bufend = db->rawbuf + db->dmasize;
  890. int             cnt, ret;
  891. if (bufptr + count > bufend) {
  892. int             partial = (int) (bufend - bufptr);
  893. if (to_user) {
  894. if ((cnt = translate_to_user(db, userbuf,
  895.      bufptr, partial)) < 0)
  896. return cnt;
  897. ret = cnt;
  898. if ((cnt = translate_to_user(db, userbuf + partial,
  899.      db->rawbuf,
  900.      count - partial)) < 0)
  901. return cnt;
  902. ret += cnt;
  903. } else {
  904. if ((cnt = translate_from_user(db, bufptr, userbuf,
  905.        partial)) < 0)
  906. return cnt;
  907. ret = cnt;
  908. if ((cnt = translate_from_user(db, db->rawbuf,
  909.        userbuf + partial,
  910.        count - partial)) < 0)
  911. return cnt;
  912. ret += cnt;
  913. }
  914. } else {
  915. if (to_user)
  916. ret = translate_to_user(db, userbuf, bufptr, count);
  917. else
  918. ret = translate_from_user(db, bufptr, userbuf, count);
  919. }
  920. return ret;
  921. }
  922. static ssize_t au1000_read(struct file *file, char *buffer,
  923.    size_t count, loff_t *ppos)
  924. {
  925. struct au1000_state *s = (struct au1000_state *)file->private_data;
  926. struct dmabuf  *db = &s->dma_adc;
  927. DECLARE_WAITQUEUE(wait, current);
  928. ssize_t         ret;
  929. unsigned long   flags;
  930. int             cnt, usercnt, avail;
  931. if (ppos != &file->f_pos)
  932. return -ESPIPE;
  933. if (db->mapped)
  934. return -ENXIO;
  935. if (!access_ok(VERIFY_WRITE, buffer, count))
  936. return -EFAULT;
  937. ret = 0;
  938. count *= db->cnt_factor;
  939. down(&s->sem);
  940. add_wait_queue(&db->wait, &wait);
  941. while (count > 0) {
  942. // wait for samples in ADC dma buffer
  943. do {
  944. if (db->stopped)
  945. start_adc(s);
  946. spin_lock_irqsave(&s->lock, flags);
  947. avail = db->count;
  948. if (avail <= 0)
  949. __set_current_state(TASK_INTERRUPTIBLE);
  950. spin_unlock_irqrestore(&s->lock, flags);
  951. if (avail <= 0) {
  952. if (file->f_flags & O_NONBLOCK) {
  953. if (!ret)
  954. ret = -EAGAIN;
  955. goto out;
  956. }
  957. up(&s->sem);
  958. schedule();
  959. if (signal_pending(current)) {
  960. if (!ret)
  961. ret = -ERESTARTSYS;
  962. goto out2;
  963. }
  964. down(&s->sem);
  965. }
  966. } while (avail <= 0);
  967. // copy from nextOut to user
  968. if ((cnt = copy_dmabuf_user(db, buffer,
  969.     count > avail ?
  970.     avail : count, 1)) < 0) {
  971. if (!ret)
  972. ret = -EFAULT;
  973. goto out;
  974. }
  975. spin_lock_irqsave(&s->lock, flags);
  976. db->count -= cnt;
  977. db->nextOut += cnt;
  978. if (db->nextOut >= db->rawbuf + db->dmasize)
  979. db->nextOut -= db->dmasize;
  980. spin_unlock_irqrestore(&s->lock, flags);
  981. count -= cnt;
  982. usercnt = cnt / db->cnt_factor;
  983. buffer += usercnt;
  984. ret += usercnt;
  985. } // while (count > 0)
  986. out:
  987. up(&s->sem);
  988. out2:
  989. remove_wait_queue(&db->wait, &wait);
  990. set_current_state(TASK_RUNNING);
  991. return ret;
  992. }
  993. static ssize_t au1000_write(struct file *file, const char *buffer,
  994.           size_t count, loff_t * ppos)
  995. {
  996. struct au1000_state *s = (struct au1000_state *)file->private_data;
  997. struct dmabuf  *db = &s->dma_dac;
  998. DECLARE_WAITQUEUE(wait, current);
  999. ssize_t         ret = 0;
  1000. unsigned long   flags;
  1001. int             cnt, usercnt, avail;
  1002. #ifdef AU1000_VERBOSE_DEBUG
  1003. dbg("write: count=%d", count);
  1004. #endif
  1005. if (ppos != &file->f_pos)
  1006. return -ESPIPE;
  1007. if (db->mapped)
  1008. return -ENXIO;
  1009. if (!access_ok(VERIFY_READ, buffer, count))
  1010. return -EFAULT;
  1011. count *= db->cnt_factor;
  1012. down(&s->sem);
  1013. add_wait_queue(&db->wait, &wait);
  1014. while (count > 0) {
  1015. // wait for space in playback buffer
  1016. do {
  1017. spin_lock_irqsave(&s->lock, flags);
  1018. avail = (int) db->dmasize - db->count;
  1019. if (avail <= 0)
  1020. __set_current_state(TASK_INTERRUPTIBLE);
  1021. spin_unlock_irqrestore(&s->lock, flags);
  1022. if (avail <= 0) {
  1023. if (file->f_flags & O_NONBLOCK) {
  1024. if (!ret)
  1025. ret = -EAGAIN;
  1026. goto out;
  1027. }
  1028. up(&s->sem);
  1029. schedule();
  1030. if (signal_pending(current)) {
  1031. if (!ret)
  1032. ret = -ERESTARTSYS;
  1033. goto out2;
  1034. }
  1035. down(&s->sem);
  1036. }
  1037. } while (avail <= 0);
  1038. // copy from user to nextIn
  1039. if ((cnt = copy_dmabuf_user(db, (char *) buffer,
  1040.     count > avail ?
  1041.     avail : count, 0)) < 0) {
  1042. if (!ret)
  1043. ret = -EFAULT;
  1044. goto out;
  1045. }
  1046. spin_lock_irqsave(&s->lock, flags);
  1047. db->count += cnt;
  1048. db->nextIn += cnt;
  1049. if (db->nextIn >= db->rawbuf + db->dmasize)
  1050. db->nextIn -= db->dmasize;
  1051. spin_unlock_irqrestore(&s->lock, flags);
  1052. if (db->stopped)
  1053. start_dac(s);
  1054. count -= cnt;
  1055. usercnt = cnt / db->cnt_factor;
  1056. buffer += usercnt;
  1057. ret += usercnt;
  1058. } // while (count > 0)
  1059. out:
  1060. up(&s->sem);
  1061. out2:
  1062. remove_wait_queue(&db->wait, &wait);
  1063. set_current_state(TASK_RUNNING);
  1064. return ret;
  1065. }
  1066. /* No kernel lock - we have our own spinlock */
  1067. static unsigned int au1000_poll(struct file *file,
  1068. struct poll_table_struct *wait)
  1069. {
  1070. struct au1000_state *s = (struct au1000_state *)file->private_data;
  1071. unsigned long   flags;
  1072. unsigned int    mask = 0;
  1073. if (file->f_mode & FMODE_WRITE) {
  1074. if (!s->dma_dac.ready)
  1075. return 0;
  1076. poll_wait(file, &s->dma_dac.wait, wait);
  1077. }
  1078. if (file->f_mode & FMODE_READ) {
  1079. if (!s->dma_adc.ready)
  1080. return 0;
  1081. poll_wait(file, &s->dma_adc.wait, wait);
  1082. }
  1083. spin_lock_irqsave(&s->lock, flags);
  1084. if (file->f_mode & FMODE_READ) {
  1085. if (s->dma_adc.count >= (signed)s->dma_adc.dma_fragsize)
  1086. mask |= POLLIN | POLLRDNORM;
  1087. }
  1088. if (file->f_mode & FMODE_WRITE) {
  1089. if (s->dma_dac.mapped) {
  1090. if (s->dma_dac.count >=
  1091.     (signed)s->dma_dac.dma_fragsize) 
  1092. mask |= POLLOUT | POLLWRNORM;
  1093. } else {
  1094. if ((signed) s->dma_dac.dmasize >=
  1095.     s->dma_dac.count + (signed)s->dma_dac.dma_fragsize)
  1096. mask |= POLLOUT | POLLWRNORM;
  1097. }
  1098. }
  1099. spin_unlock_irqrestore(&s->lock, flags);
  1100. return mask;
  1101. }
  1102. static int au1000_mmap(struct file *file, struct vm_area_struct *vma)
  1103. {
  1104. struct au1000_state *s = (struct au1000_state *)file->private_data;
  1105. struct dmabuf  *db;
  1106. unsigned long   size;
  1107. int ret = 0;
  1108. dbg(__FUNCTION__);
  1109.     
  1110. lock_kernel();
  1111. down(&s->sem);
  1112. if (vma->vm_flags & VM_WRITE)
  1113. db = &s->dma_dac;
  1114. else if (vma->vm_flags & VM_READ)
  1115. db = &s->dma_adc;
  1116. else {
  1117. ret = -EINVAL;
  1118. goto out;
  1119. }
  1120. if (vma->vm_pgoff != 0) {
  1121. ret = -EINVAL;
  1122. goto out;
  1123. }
  1124. size = vma->vm_end - vma->vm_start;
  1125. if (size > (PAGE_SIZE << db->buforder)) {
  1126. ret = -EINVAL;
  1127. goto out;
  1128. }
  1129. if (remap_page_range(vma->vm_start, virt_to_phys(db->rawbuf),
  1130.      size, vma->vm_page_prot)) {
  1131. ret = -EAGAIN;
  1132. goto out;
  1133. }
  1134. vma->vm_flags &= ~VM_IO;
  1135. db->mapped = 1;
  1136. out:
  1137. up(&s->sem);
  1138. unlock_kernel();
  1139. return ret;
  1140. }
  1141. #ifdef AU1000_VERBOSE_DEBUG
  1142. static struct ioctl_str_t {
  1143. unsigned int    cmd;
  1144. const char     *str;
  1145. } ioctl_str[] = {
  1146. {SNDCTL_DSP_RESET, "SNDCTL_DSP_RESET"},
  1147. {SNDCTL_DSP_SYNC, "SNDCTL_DSP_SYNC"},
  1148. {SNDCTL_DSP_SPEED, "SNDCTL_DSP_SPEED"},
  1149. {SNDCTL_DSP_STEREO, "SNDCTL_DSP_STEREO"},
  1150. {SNDCTL_DSP_GETBLKSIZE, "SNDCTL_DSP_GETBLKSIZE"},
  1151. {SNDCTL_DSP_SAMPLESIZE, "SNDCTL_DSP_SAMPLESIZE"},
  1152. {SNDCTL_DSP_CHANNELS, "SNDCTL_DSP_CHANNELS"},
  1153. {SOUND_PCM_WRITE_CHANNELS, "SOUND_PCM_WRITE_CHANNELS"},
  1154. {SOUND_PCM_WRITE_FILTER, "SOUND_PCM_WRITE_FILTER"},
  1155. {SNDCTL_DSP_POST, "SNDCTL_DSP_POST"},
  1156. {SNDCTL_DSP_SUBDIVIDE, "SNDCTL_DSP_SUBDIVIDE"},
  1157. {SNDCTL_DSP_SETFRAGMENT, "SNDCTL_DSP_SETFRAGMENT"},
  1158. {SNDCTL_DSP_GETFMTS, "SNDCTL_DSP_GETFMTS"},
  1159. {SNDCTL_DSP_SETFMT, "SNDCTL_DSP_SETFMT"},
  1160. {SNDCTL_DSP_GETOSPACE, "SNDCTL_DSP_GETOSPACE"},
  1161. {SNDCTL_DSP_GETISPACE, "SNDCTL_DSP_GETISPACE"},
  1162. {SNDCTL_DSP_NONBLOCK, "SNDCTL_DSP_NONBLOCK"},
  1163. {SNDCTL_DSP_GETCAPS, "SNDCTL_DSP_GETCAPS"},
  1164. {SNDCTL_DSP_GETTRIGGER, "SNDCTL_DSP_GETTRIGGER"},
  1165. {SNDCTL_DSP_SETTRIGGER, "SNDCTL_DSP_SETTRIGGER"},
  1166. {SNDCTL_DSP_GETIPTR, "SNDCTL_DSP_GETIPTR"},
  1167. {SNDCTL_DSP_GETOPTR, "SNDCTL_DSP_GETOPTR"},
  1168. {SNDCTL_DSP_MAPINBUF, "SNDCTL_DSP_MAPINBUF"},
  1169. {SNDCTL_DSP_MAPOUTBUF, "SNDCTL_DSP_MAPOUTBUF"},
  1170. {SNDCTL_DSP_SETSYNCRO, "SNDCTL_DSP_SETSYNCRO"},
  1171. {SNDCTL_DSP_SETDUPLEX, "SNDCTL_DSP_SETDUPLEX"},
  1172. {SNDCTL_DSP_GETODELAY, "SNDCTL_DSP_GETODELAY"},
  1173. {SNDCTL_DSP_GETCHANNELMASK, "SNDCTL_DSP_GETCHANNELMASK"},
  1174. {SNDCTL_DSP_BIND_CHANNEL, "SNDCTL_DSP_BIND_CHANNEL"},
  1175. {OSS_GETVERSION, "OSS_GETVERSION"},
  1176. {SOUND_PCM_READ_RATE, "SOUND_PCM_READ_RATE"},
  1177. {SOUND_PCM_READ_CHANNELS, "SOUND_PCM_READ_CHANNELS"},
  1178. {SOUND_PCM_READ_BITS, "SOUND_PCM_READ_BITS"},
  1179. {SOUND_PCM_READ_FILTER, "SOUND_PCM_READ_FILTER"}
  1180. };
  1181. #endif
  1182. // Need to hold a spin-lock before calling this!
  1183. static int dma_count_done(struct dmabuf *db)
  1184. {
  1185. if (db->stopped)
  1186. return 0;
  1187. return db->dma_fragsize - get_dma_residue(db->dmanr);
  1188. }
  1189. static int au1000_ioctl(struct inode *inode, struct file *file,
  1190.                         unsigned int cmd, unsigned long arg)
  1191. {
  1192. struct au1000_state *s = (struct au1000_state *)file->private_data;
  1193. unsigned long   flags;
  1194. audio_buf_info  abinfo;
  1195. count_info      cinfo;
  1196. int             count;
  1197. int             val, mapped, ret, diff;
  1198. mapped = ((file->f_mode & FMODE_WRITE) && s->dma_dac.mapped) ||
  1199. ((file->f_mode & FMODE_READ) && s->dma_adc.mapped);
  1200. #ifdef AU1000_VERBOSE_DEBUG
  1201. for (count=0; count<sizeof(ioctl_str)/sizeof(ioctl_str[0]); count++) {
  1202. if (ioctl_str[count].cmd == cmd)
  1203. break;
  1204. }
  1205. if (count < sizeof(ioctl_str) / sizeof(ioctl_str[0]))
  1206. dbg("ioctl %s, arg=0x%lx", ioctl_str[count].str, arg);
  1207. else
  1208. dbg("ioctl 0x%x unknown, arg=0x%lx", cmd, arg);
  1209. #endif
  1210. switch (cmd) {
  1211. case OSS_GETVERSION:
  1212. return put_user(SOUND_VERSION, (int *) arg);
  1213. case SNDCTL_DSP_SYNC:
  1214. if (file->f_mode & FMODE_WRITE)
  1215. return drain_dac(s, file->f_flags & O_NONBLOCK);
  1216. return 0;
  1217. case SNDCTL_DSP_SETDUPLEX:
  1218. return 0;
  1219. case SNDCTL_DSP_GETCAPS:
  1220. return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME |
  1221. DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
  1222. case SNDCTL_DSP_RESET:
  1223. if (file->f_mode & FMODE_WRITE) {
  1224. stop_dac(s);
  1225. synchronize_irq();
  1226. s->dma_dac.count = s->dma_dac.total_bytes = 0;
  1227. s->dma_dac.nextIn = s->dma_dac.nextOut =
  1228. s->dma_dac.rawbuf;
  1229. }
  1230. if (file->f_mode & FMODE_READ) {
  1231. stop_adc(s);
  1232. synchronize_irq();
  1233. s->dma_adc.count = s->dma_adc.total_bytes = 0;
  1234. s->dma_adc.nextIn = s->dma_adc.nextOut =
  1235. s->dma_adc.rawbuf;
  1236. }
  1237. return 0;
  1238. case SNDCTL_DSP_SPEED:
  1239. if (get_user(val, (int *) arg))
  1240. return -EFAULT;
  1241. if (val >= 0) {
  1242. if (file->f_mode & FMODE_READ) {
  1243. stop_adc(s);
  1244. set_adc_rate(s, val);
  1245. }
  1246. if (file->f_mode & FMODE_WRITE) {
  1247. stop_dac(s);
  1248. set_dac_rate(s, val);
  1249. }
  1250. if (s->open_mode & FMODE_READ)
  1251. if ((ret = prog_dmabuf_adc(s)))
  1252. return ret;
  1253. if (s->open_mode & FMODE_WRITE)
  1254. if ((ret = prog_dmabuf_dac(s)))
  1255. return ret;
  1256. }
  1257. return put_user((file->f_mode & FMODE_READ) ?
  1258. s->dma_adc.sample_rate :
  1259. s->dma_dac.sample_rate,
  1260. (int *)arg);
  1261. case SNDCTL_DSP_STEREO:
  1262. if (get_user(val, (int *) arg))
  1263. return -EFAULT;
  1264. if (file->f_mode & FMODE_READ) {
  1265. stop_adc(s);
  1266. s->dma_adc.num_channels = val ? 2 : 1;
  1267. if ((ret = prog_dmabuf_adc(s)))
  1268. return ret;
  1269. }
  1270. if (file->f_mode & FMODE_WRITE) {
  1271. stop_dac(s);
  1272. s->dma_dac.num_channels = val ? 2 : 1;
  1273. if (s->codec_ext_caps & AC97_EXT_DACS) {
  1274. // disable surround and center/lfe in AC'97
  1275. u16 ext_stat = rdcodec(&s->codec,
  1276.        AC97_EXTENDED_STATUS);
  1277. wrcodec(&s->codec, AC97_EXTENDED_STATUS,
  1278. ext_stat | (AC97_EXTSTAT_PRI |
  1279.     AC97_EXTSTAT_PRJ |
  1280.     AC97_EXTSTAT_PRK));
  1281. }
  1282. if ((ret = prog_dmabuf_dac(s)))
  1283. return ret;
  1284. }
  1285. return 0;
  1286. case SNDCTL_DSP_CHANNELS:
  1287. if (get_user(val, (int *) arg))
  1288. return -EFAULT;
  1289. if (val != 0) {
  1290. if (file->f_mode & FMODE_READ) {
  1291. if (val < 0 || val > 2)
  1292. return -EINVAL;
  1293. stop_adc(s);
  1294. s->dma_adc.num_channels = val;
  1295. if ((ret = prog_dmabuf_adc(s)))
  1296. return ret;
  1297. }
  1298. if (file->f_mode & FMODE_WRITE) {
  1299. switch (val) {
  1300. case 1:
  1301. case 2:
  1302. break;
  1303. case 3:
  1304. case 5:
  1305. return -EINVAL;
  1306. case 4:
  1307. if (!(s->codec_ext_caps &
  1308.       AC97_EXTID_SDAC))
  1309. return -EINVAL;
  1310. break;
  1311. case 6:
  1312. if ((s->codec_ext_caps &
  1313.      AC97_EXT_DACS) != AC97_EXT_DACS)
  1314. return -EINVAL;
  1315. break;
  1316. default:
  1317. return -EINVAL;
  1318. }
  1319. stop_dac(s);
  1320. if (val <= 2 &&
  1321.     (s->codec_ext_caps & AC97_EXT_DACS)) {
  1322. // disable surround and center/lfe
  1323. // channels in AC'97
  1324. u16             ext_stat =
  1325. rdcodec(&s->codec,
  1326. AC97_EXTENDED_STATUS);
  1327. wrcodec(&s->codec,
  1328. AC97_EXTENDED_STATUS,
  1329. ext_stat | (AC97_EXTSTAT_PRI |
  1330.     AC97_EXTSTAT_PRJ |
  1331.     AC97_EXTSTAT_PRK));
  1332. } else if (val >= 4) {
  1333. // enable surround, center/lfe
  1334. // channels in AC'97
  1335. u16             ext_stat =
  1336. rdcodec(&s->codec,
  1337. AC97_EXTENDED_STATUS);
  1338. ext_stat &= ~AC97_EXTSTAT_PRJ;
  1339. if (val == 6)
  1340. ext_stat &=
  1341. ~(AC97_EXTSTAT_PRI |
  1342.   AC97_EXTSTAT_PRK);
  1343. wrcodec(&s->codec,
  1344. AC97_EXTENDED_STATUS,
  1345. ext_stat);
  1346. }
  1347. s->dma_dac.num_channels = val;
  1348. if ((ret = prog_dmabuf_dac(s)))
  1349. return ret;
  1350. }
  1351. }
  1352. return put_user(val, (int *) arg);
  1353. case SNDCTL_DSP_GETFMTS: /* Returns a mask */
  1354. return put_user(AFMT_S16_LE | AFMT_U8, (int *) arg);
  1355. case SNDCTL_DSP_SETFMT: /* Selects ONE fmt */
  1356. if (get_user(val, (int *) arg))
  1357. return -EFAULT;
  1358. if (val != AFMT_QUERY) {
  1359. if (file->f_mode & FMODE_READ) {
  1360. stop_adc(s);
  1361. if (val == AFMT_S16_LE)
  1362. s->dma_adc.sample_size = 16;
  1363. else {
  1364. val = AFMT_U8;
  1365. s->dma_adc.sample_size = 8;
  1366. }
  1367. if ((ret = prog_dmabuf_adc(s)))
  1368. return ret;
  1369. }
  1370. if (file->f_mode & FMODE_WRITE) {
  1371. stop_dac(s);
  1372. if (val == AFMT_S16_LE)
  1373. s->dma_dac.sample_size = 16;
  1374. else {
  1375. val = AFMT_U8;
  1376. s->dma_dac.sample_size = 8;
  1377. }
  1378. if ((ret = prog_dmabuf_dac(s)))
  1379. return ret;
  1380. }
  1381. } else {
  1382. if (file->f_mode & FMODE_READ)
  1383. val = (s->dma_adc.sample_size == 16) ?
  1384. AFMT_S16_LE : AFMT_U8;
  1385. else
  1386. val = (s->dma_dac.sample_size == 16) ?
  1387. AFMT_S16_LE : AFMT_U8;
  1388. }
  1389. return put_user(val, (int *) arg);
  1390. case SNDCTL_DSP_POST:
  1391. return 0;
  1392. case SNDCTL_DSP_GETTRIGGER:
  1393. val = 0;
  1394. spin_lock_irqsave(&s->lock, flags);
  1395. if (file->f_mode & FMODE_READ && !s->dma_adc.stopped)
  1396. val |= PCM_ENABLE_INPUT;
  1397. if (file->f_mode & FMODE_WRITE && !s->dma_dac.stopped)
  1398. val |= PCM_ENABLE_OUTPUT;
  1399. spin_unlock_irqrestore(&s->lock, flags);
  1400. return put_user(val, (int *) arg);
  1401. case SNDCTL_DSP_SETTRIGGER:
  1402. if (get_user(val, (int *) arg))
  1403. return -EFAULT;
  1404. if (file->f_mode & FMODE_READ) {
  1405. if (val & PCM_ENABLE_INPUT)
  1406. start_adc(s);
  1407. else
  1408. stop_adc(s);
  1409. }
  1410. if (file->f_mode & FMODE_WRITE) {
  1411. if (val & PCM_ENABLE_OUTPUT)
  1412. start_dac(s);
  1413. else
  1414. stop_dac(s);
  1415. }
  1416. return 0;
  1417. case SNDCTL_DSP_GETOSPACE:
  1418. if (!(file->f_mode & FMODE_WRITE))
  1419. return -EINVAL;
  1420. abinfo.fragsize = s->dma_dac.fragsize;
  1421. spin_lock_irqsave(&s->lock, flags);
  1422. count = s->dma_dac.count;
  1423. count -= dma_count_done(&s->dma_dac);
  1424. spin_unlock_irqrestore(&s->lock, flags);
  1425. if (count < 0)
  1426. count = 0;
  1427. abinfo.bytes = (s->dma_dac.dmasize - count) /
  1428. s->dma_dac.cnt_factor;
  1429. abinfo.fragstotal = s->dma_dac.numfrag;
  1430. abinfo.fragments = abinfo.bytes >> s->dma_dac.fragshift;
  1431. #ifdef AU1000_VERBOSE_DEBUG
  1432. dbg("bytes=%d, fragments=%d", abinfo.bytes, abinfo.fragments);
  1433. #endif
  1434. return copy_to_user((void *) arg, &abinfo,
  1435.     sizeof(abinfo)) ? -EFAULT : 0;
  1436. case SNDCTL_DSP_GETISPACE:
  1437. if (!(file->f_mode & FMODE_READ))
  1438. return -EINVAL;
  1439. abinfo.fragsize = s->dma_adc.fragsize;
  1440. spin_lock_irqsave(&s->lock, flags);
  1441. count = s->dma_adc.count;
  1442. count += dma_count_done(&s->dma_adc);
  1443. spin_unlock_irqrestore(&s->lock, flags);
  1444. if (count < 0)
  1445. count = 0;
  1446. abinfo.bytes = count / s->dma_adc.cnt_factor;
  1447. abinfo.fragstotal = s->dma_adc.numfrag;
  1448. abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;
  1449. return copy_to_user((void *) arg, &abinfo,
  1450.     sizeof(abinfo)) ? -EFAULT : 0;
  1451. case SNDCTL_DSP_NONBLOCK:
  1452. file->f_flags |= O_NONBLOCK;
  1453. return 0;
  1454. case SNDCTL_DSP_GETODELAY:
  1455. if (!(file->f_mode & FMODE_WRITE))
  1456. return -EINVAL;
  1457. spin_lock_irqsave(&s->lock, flags);
  1458. count = s->dma_dac.count;
  1459. count -= dma_count_done(&s->dma_dac);
  1460. spin_unlock_irqrestore(&s->lock, flags);
  1461. if (count < 0)
  1462. count = 0;
  1463. count /= s->dma_dac.cnt_factor;
  1464. return put_user(count, (int *) arg);
  1465. case SNDCTL_DSP_GETIPTR:
  1466. if (!(file->f_mode & FMODE_READ))
  1467. return -EINVAL;
  1468. spin_lock_irqsave(&s->lock, flags);
  1469. cinfo.bytes = s->dma_adc.total_bytes;
  1470. count = s->dma_adc.count;
  1471. if (!s->dma_adc.stopped) {
  1472. diff = dma_count_done(&s->dma_adc);
  1473. count += diff;
  1474. cinfo.bytes += diff;
  1475. cinfo.ptr =  virt_to_phys(s->dma_adc.nextIn) + diff -
  1476. s->dma_adc.dmaaddr;
  1477. } else
  1478. cinfo.ptr = virt_to_phys(s->dma_adc.nextIn) -
  1479. s->dma_adc.dmaaddr;
  1480. if (s->dma_adc.mapped)
  1481. s->dma_adc.count &= (s->dma_adc.dma_fragsize-1);
  1482. spin_unlock_irqrestore(&s->lock, flags);
  1483. if (count < 0)
  1484. count = 0;
  1485. cinfo.blocks = count >> s->dma_adc.fragshift;
  1486. return copy_to_user((void *) arg, &cinfo, sizeof(cinfo));
  1487. case SNDCTL_DSP_GETOPTR:
  1488. if (!(file->f_mode & FMODE_READ))
  1489. return -EINVAL;
  1490. spin_lock_irqsave(&s->lock, flags);
  1491. cinfo.bytes = s->dma_dac.total_bytes;
  1492. count = s->dma_dac.count;
  1493. if (!s->dma_dac.stopped) {
  1494. diff = dma_count_done(&s->dma_dac);
  1495. count -= diff;
  1496. cinfo.bytes += diff;
  1497. cinfo.ptr = virt_to_phys(s->dma_dac.nextOut) + diff -
  1498. s->dma_dac.dmaaddr;
  1499. } else
  1500. cinfo.ptr = virt_to_phys(s->dma_dac.nextOut) -
  1501. s->dma_dac.dmaaddr;
  1502. if (s->dma_dac.mapped)
  1503. s->dma_dac.count &= (s->dma_dac.dma_fragsize-1);
  1504. spin_unlock_irqrestore(&s->lock, flags);
  1505. if (count < 0)
  1506. count = 0;
  1507. cinfo.blocks = count >> s->dma_dac.fragshift;
  1508. return copy_to_user((void *) arg, &cinfo, sizeof(cinfo));
  1509. case SNDCTL_DSP_GETBLKSIZE:
  1510. if (file->f_mode & FMODE_WRITE)
  1511. return put_user(s->dma_dac.fragsize, (int *) arg);
  1512. else
  1513. return put_user(s->dma_adc.fragsize, (int *) arg);
  1514. case SNDCTL_DSP_SETFRAGMENT:
  1515. if (get_user(val, (int *) arg))
  1516. return -EFAULT;
  1517. if (file->f_mode & FMODE_READ) {
  1518. stop_adc(s);
  1519. s->dma_adc.ossfragshift = val & 0xffff;
  1520. s->dma_adc.ossmaxfrags = (val >> 16) & 0xffff;
  1521. if (s->dma_adc.ossfragshift < 4)
  1522. s->dma_adc.ossfragshift = 4;
  1523. if (s->dma_adc.ossfragshift > 15)
  1524. s->dma_adc.ossfragshift = 15;
  1525. if (s->dma_adc.ossmaxfrags < 4)
  1526. s->dma_adc.ossmaxfrags = 4;
  1527. if ((ret = prog_dmabuf_adc(s)))
  1528. return ret;
  1529. }
  1530. if (file->f_mode & FMODE_WRITE) {
  1531. stop_dac(s);
  1532. s->dma_dac.ossfragshift = val & 0xffff;
  1533. s->dma_dac.ossmaxfrags = (val >> 16) & 0xffff;
  1534. if (s->dma_dac.ossfragshift < 4)
  1535. s->dma_dac.ossfragshift = 4;
  1536. if (s->dma_dac.ossfragshift > 15)
  1537. s->dma_dac.ossfragshift = 15;
  1538. if (s->dma_dac.ossmaxfrags < 4)
  1539. s->dma_dac.ossmaxfrags = 4;
  1540. if ((ret = prog_dmabuf_dac(s)))
  1541. return ret;
  1542. }
  1543. return 0;
  1544. case SNDCTL_DSP_SUBDIVIDE:
  1545. if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) ||
  1546.     (file->f_mode & FMODE_WRITE && s->dma_dac.subdivision))
  1547. return -EINVAL;
  1548. if (get_user(val, (int *) arg))
  1549. return -EFAULT;
  1550. if (val != 1 && val != 2 && val != 4)
  1551. return -EINVAL;
  1552. if (file->f_mode & FMODE_READ) {
  1553. stop_adc(s);
  1554. s->dma_adc.subdivision = val;
  1555. if ((ret = prog_dmabuf_adc(s)))
  1556. return ret;
  1557. }
  1558. if (file->f_mode & FMODE_WRITE) {
  1559. stop_dac(s);
  1560. s->dma_dac.subdivision = val;
  1561. if ((ret = prog_dmabuf_dac(s)))
  1562. return ret;
  1563. }
  1564. return 0;
  1565. case SOUND_PCM_READ_RATE:
  1566. return put_user((file->f_mode & FMODE_READ) ?
  1567. s->dma_adc.sample_rate :
  1568. s->dma_dac.sample_rate,
  1569. (int *)arg);
  1570. case SOUND_PCM_READ_CHANNELS:
  1571. if (file->f_mode & FMODE_READ)
  1572. return put_user(s->dma_adc.num_channels, (int *)arg);
  1573. else
  1574. return put_user(s->dma_dac.num_channels, (int *)arg);
  1575. case SOUND_PCM_READ_BITS:
  1576. if (file->f_mode & FMODE_READ)
  1577. return put_user(s->dma_adc.sample_size, (int *)arg);
  1578. else
  1579. return put_user(s->dma_dac.sample_size, (int *)arg);
  1580. case SOUND_PCM_WRITE_FILTER:
  1581. case SNDCTL_DSP_SETSYNCRO:
  1582. case SOUND_PCM_READ_FILTER:
  1583. return -EINVAL;
  1584. }
  1585. return mixdev_ioctl(&s->codec, cmd, arg);
  1586. }
  1587. static int  au1000_open(struct inode *inode, struct file *file)
  1588. {
  1589. int             minor = MINOR(inode->i_rdev);
  1590. DECLARE_WAITQUEUE(wait, current);
  1591. struct au1000_state *s = &au1000_state;
  1592. int             ret;
  1593. #ifdef AU1000_VERBOSE_DEBUG
  1594. if (file->f_flags & O_NONBLOCK)
  1595. dbg(__FUNCTION__ ": non-blocking");
  1596. else
  1597. dbg(__FUNCTION__ ": blocking");
  1598. #endif
  1599. file->private_data = s;
  1600. /* wait for device to become free */
  1601. down(&s->open_sem);
  1602. while (s->open_mode & file->f_mode) {
  1603. if (file->f_flags & O_NONBLOCK) {
  1604. up(&s->open_sem);
  1605. return -EBUSY;
  1606. }
  1607. add_wait_queue(&s->open_wait, &wait);
  1608. __set_current_state(TASK_INTERRUPTIBLE);
  1609. up(&s->open_sem);
  1610. schedule();
  1611. remove_wait_queue(&s->open_wait, &wait);
  1612. set_current_state(TASK_RUNNING);
  1613. if (signal_pending(current))
  1614. return -ERESTARTSYS;
  1615. down(&s->open_sem);
  1616. }
  1617. stop_dac(s);
  1618. stop_adc(s);
  1619. if (file->f_mode & FMODE_READ) {
  1620. s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags =
  1621. s->dma_adc.subdivision = s->dma_adc.total_bytes = 0;
  1622. s->dma_adc.num_channels = 1;
  1623. s->dma_adc.sample_size = 8;
  1624. set_adc_rate(s, 8000);
  1625. if ((minor & 0xf) == SND_DEV_DSP16)
  1626. s->dma_adc.sample_size = 16;
  1627. }
  1628. if (file->f_mode & FMODE_WRITE) {
  1629. s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags =
  1630. s->dma_dac.subdivision = s->dma_dac.total_bytes = 0;
  1631. s->dma_dac.num_channels = 1;
  1632. s->dma_dac.sample_size = 8;
  1633. set_dac_rate(s, 8000);
  1634. if ((minor & 0xf) == SND_DEV_DSP16)
  1635. s->dma_dac.sample_size = 16;
  1636. }
  1637. if (file->f_mode & FMODE_READ) {
  1638. if ((ret = prog_dmabuf_adc(s)))
  1639. return ret;
  1640. }
  1641. if (file->f_mode & FMODE_WRITE) {
  1642. if ((ret = prog_dmabuf_dac(s)))
  1643. return ret;
  1644. }
  1645. s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
  1646. up(&s->open_sem);
  1647. init_MUTEX(&s->sem);
  1648. return 0;
  1649. }
  1650. static int au1000_release(struct inode *inode, struct file *file)
  1651. {
  1652. struct au1000_state *s = (struct au1000_state *)file->private_data;
  1653. lock_kernel();
  1654. if (file->f_mode & FMODE_WRITE) {
  1655. unlock_kernel();
  1656. drain_dac(s, file->f_flags & O_NONBLOCK);
  1657. lock_kernel();
  1658. }
  1659. down(&s->open_sem);
  1660. if (file->f_mode & FMODE_WRITE) {
  1661. stop_dac(s);
  1662. dealloc_dmabuf(s, &s->dma_dac);
  1663. }
  1664. if (file->f_mode & FMODE_READ) {
  1665. stop_adc(s);
  1666. dealloc_dmabuf(s, &s->dma_adc);
  1667. }
  1668. s->open_mode &= ((~file->f_mode) & (FMODE_READ|FMODE_WRITE));
  1669. up(&s->open_sem);
  1670. wake_up(&s->open_wait);
  1671. unlock_kernel();
  1672. return 0;
  1673. }
  1674. static /*const */ struct file_operations au1000_audio_fops = {
  1675. owner: THIS_MODULE,
  1676. llseek: au1000_llseek,
  1677. read: au1000_read,
  1678. write: au1000_write,
  1679. poll: au1000_poll,
  1680. ioctl: au1000_ioctl,
  1681. mmap: au1000_mmap,
  1682. open: au1000_open,
  1683. release: au1000_release,
  1684. };
  1685. /* --------------------------------------------------------------------- */
  1686. /* --------------------------------------------------------------------- */
  1687. /*
  1688.  * for debugging purposes, we'll create a proc device that dumps the
  1689.  * CODEC chipstate
  1690.  */
  1691. #ifdef AU1000_DEBUG
  1692. static int proc_au1000_dump(char *buf, char **start, off_t fpos,
  1693.     int length, int *eof, void *data)
  1694. {
  1695. struct au1000_state *s = &au1000_state;
  1696. int             cnt, len = 0;
  1697. /* print out header */
  1698. len += sprintf(buf + len, "nttAU1000 Audio Debugnn");
  1699. // print out digital controller state
  1700. len += sprintf(buf + len, "AU1000 Audio Controller registersn");
  1701. len += sprintf(buf + len, "---------------------------------n");
  1702. len += sprintf (buf + len, "AC97C_CONFIG = %08xn",
  1703. au_readl(AC97C_CONFIG));
  1704. len += sprintf (buf + len, "AC97C_STATUS = %08xn",
  1705. au_readl(AC97C_STATUS));
  1706. len += sprintf (buf + len, "AC97C_CNTRL  = %08xn",
  1707. au_readl(AC97C_CNTRL));
  1708. /* print out CODEC state */
  1709. len += sprintf(buf + len, "nAC97 CODEC registersn");
  1710. len += sprintf(buf + len, "----------------------n");
  1711. for (cnt = 0; cnt <= 0x7e; cnt += 2)
  1712. len += sprintf(buf + len, "reg %02x = %04xn",
  1713.        cnt, rdcodec(&s->codec, cnt));
  1714. if (fpos >= len) {
  1715. *start = buf;
  1716. *eof = 1;
  1717. return 0;
  1718. }
  1719. *start = buf + fpos;
  1720. if ((len -= fpos) > length)
  1721. return length;
  1722. *eof = 1;
  1723. return len;
  1724. }
  1725. #endif /* AU1000_DEBUG */
  1726. /* --------------------------------------------------------------------- */
  1727. MODULE_AUTHOR("Monta Vista Software, stevel@mvista.com");
  1728. MODULE_DESCRIPTION("Au1000 Audio Driver");
  1729. /* --------------------------------------------------------------------- */
  1730. static int __devinit au1000_probe(void)
  1731. {
  1732. struct au1000_state *s = &au1000_state;
  1733. int             val;
  1734. char            proc_str[80];
  1735. memset(s, 0, sizeof(struct au1000_state));
  1736. init_waitqueue_head(&s->dma_adc.wait);
  1737. init_waitqueue_head(&s->dma_dac.wait);
  1738. init_waitqueue_head(&s->open_wait);
  1739. init_MUTEX(&s->open_sem);
  1740. spin_lock_init(&s->lock);
  1741. s->codec.private_data = s;
  1742. s->codec.id = 0;
  1743. s->codec.codec_read = rdcodec;
  1744. s->codec.codec_write = wrcodec;
  1745. s->codec.codec_wait = waitcodec;
  1746. if (!request_region(virt_to_phys((void *) AC97C_CONFIG),
  1747.     0x14, AU1000_MODULE_NAME)) {
  1748. err("AC'97 ports in use");
  1749. return -1;
  1750. }
  1751. // Allocate the DMA Channels
  1752. if ((s->dma_dac.dmanr = request_au1000_dma(DMA_ID_AC97C_TX,
  1753.    "audio DAC",
  1754.    dac_dma_interrupt,
  1755.    SA_INTERRUPT, s)) < 0) {
  1756. err("Can't get DAC DMA");
  1757. goto err_dma1;
  1758. }
  1759. if ((s->dma_adc.dmanr = request_au1000_dma(DMA_ID_AC97C_RX,
  1760.    "audio ADC",
  1761.    adc_dma_interrupt,
  1762.    SA_INTERRUPT, s)) < 0) {
  1763. err("Can't get ADC DMA");
  1764. goto err_dma2;
  1765. }
  1766. info("DAC: DMA%d/IRQ%d, ADC: DMA%d/IRQ%d",
  1767.      s->dma_dac.dmanr, get_dma_done_irq(s->dma_dac.dmanr),
  1768.      s->dma_adc.dmanr, get_dma_done_irq(s->dma_adc.dmanr));
  1769. #ifdef USE_COHERENT_DMA
  1770. // enable DMA coherency in read/write DMA channels
  1771. set_dma_mode(s->dma_dac.dmanr,
  1772.      get_dma_mode(s->dma_dac.dmanr) & ~DMA_NC);
  1773. set_dma_mode(s->dma_adc.dmanr,
  1774.      get_dma_mode(s->dma_adc.dmanr) & ~DMA_NC);
  1775. #else
  1776. // disable DMA coherency in read/write DMA channels
  1777. set_dma_mode(s->dma_dac.dmanr,
  1778.      get_dma_mode(s->dma_dac.dmanr) | DMA_NC);
  1779. set_dma_mode(s->dma_adc.dmanr,
  1780.      get_dma_mode(s->dma_adc.dmanr) | DMA_NC);
  1781. #endif
  1782. /* register devices */
  1783. if ((s->dev_audio = register_sound_dsp(&au1000_audio_fops, -1)) < 0)
  1784. goto err_dev1;
  1785. if ((s->codec.dev_mixer =
  1786.      register_sound_mixer(&au1000_mixer_fops, -1)) < 0)
  1787. goto err_dev2;
  1788. #ifdef AU1000_DEBUG
  1789. /* intialize the debug proc device */
  1790. s->ps = create_proc_read_entry(AU1000_MODULE_NAME, 0, NULL,
  1791.        proc_au1000_dump, NULL);
  1792. #endif /* AU1000_DEBUG */
  1793. // configure pins for AC'97
  1794. au_writel(au_readl(SYS_PINFUNC) & ~0x02, SYS_PINFUNC);
  1795. // Assert reset for 10msec to the AC'97 controller, and enable clock
  1796. au_writel(AC97C_RS | AC97C_CE, AC97C_CNTRL);
  1797. au1000_delay(10);
  1798. au_writel(AC97C_CE, AC97C_CNTRL);
  1799. au1000_delay(10); // wait for clock to stabilize
  1800. /* cold reset the AC'97 */
  1801. au_writel(AC97C_RESET, AC97C_CONFIG);
  1802. au1000_delay(10);
  1803. au_writel(0, AC97C_CONFIG);
  1804. /* need to delay around 500msec(bleech) to give
  1805.    some CODECs enough time to wakeup */
  1806. au1000_delay(500);
  1807. /* warm reset the AC'97 to start the bitclk */
  1808. au_writel(AC97C_SG | AC97C_SYNC, AC97C_CONFIG);
  1809. udelay(100);
  1810. au_writel(0, AC97C_CONFIG);
  1811. /* codec init */
  1812. if (!ac97_probe_codec(&s->codec))
  1813. goto err_dev3;
  1814. s->codec_base_caps = rdcodec(&s->codec, AC97_RESET);
  1815. s->codec_ext_caps = rdcodec(&s->codec, AC97_EXTENDED_ID);
  1816. info("AC'97 Base/Extended ID = %04x/%04x",
  1817.      s->codec_base_caps, s->codec_ext_caps);
  1818. /*
  1819.  * On the Pb1000, audio playback is on the AUX_OUT
  1820.  * channel (which defaults to LNLVL_OUT in AC'97
  1821.  * rev 2.2) so make sure this channel is listed
  1822.  * as supported (soundcard.h calls this channel
  1823.  * ALTPCM). ac97_codec.c does not handle detection
  1824.  * of this channel correctly.
  1825.  */
  1826. s->codec.supported_mixers |= SOUND_MASK_ALTPCM;
  1827. /*
  1828.  * Now set AUX_OUT's default volume.
  1829.  */
  1830. val = 0x4343;
  1831. mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_ALTPCM,
  1832.      (unsigned long) &val);
  1833. if (!(s->codec_ext_caps & AC97_EXTID_VRA)) {
  1834. // codec does not support VRA
  1835. s->no_vra = 1;
  1836. } else if (!vra) {
  1837. // Boot option says disable VRA
  1838. u16 ac97_extstat = rdcodec(&s->codec, AC97_EXTENDED_STATUS);
  1839. wrcodec(&s->codec, AC97_EXTENDED_STATUS,
  1840. ac97_extstat & ~AC97_EXTSTAT_VRA);
  1841. s->no_vra = 1;
  1842. }
  1843. if (s->no_vra)
  1844. info("no VRA, interpolating and decimating");
  1845. /* set mic to be the recording source */
  1846. val = SOUND_MASK_MIC;
  1847. mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_RECSRC,
  1848.      (unsigned long) &val);
  1849. #ifdef AU1000_DEBUG
  1850. sprintf(proc_str, "driver/%s/%d/ac97", AU1000_MODULE_NAME,
  1851. s->codec.id);
  1852. s->ac97_ps = create_proc_read_entry (proc_str, 0, NULL,
  1853.      ac97_read_proc, &s->codec);
  1854. #endif
  1855. return 0;
  1856.  err_dev3:
  1857. unregister_sound_mixer(s->codec.dev_mixer);
  1858.  err_dev2:
  1859. unregister_sound_dsp(s->dev_audio);
  1860.  err_dev1:
  1861. free_au1000_dma(s->dma_adc.dmanr);
  1862.  err_dma2:
  1863. free_au1000_dma(s->dma_dac.dmanr);
  1864.  err_dma1:
  1865. release_region(virt_to_phys((void *) AC97C_CONFIG), 0x14);
  1866. return -1;
  1867. }
  1868. static void __devinit au1000_remove(void)
  1869. {
  1870. struct au1000_state *s = &au1000_state;
  1871. if (!s)
  1872. return;
  1873. #ifdef AU1000_DEBUG
  1874. if (s->ps)
  1875. remove_proc_entry(AU1000_MODULE_NAME, NULL);
  1876. #endif /* AU1000_DEBUG */
  1877. synchronize_irq();
  1878. free_au1000_dma(s->dma_adc.dmanr);
  1879. free_au1000_dma(s->dma_dac.dmanr);
  1880. release_region(virt_to_phys((void *) AC97C_CONFIG), 0x14);
  1881. unregister_sound_dsp(s->dev_audio);
  1882. unregister_sound_mixer(s->codec.dev_mixer);
  1883. }
  1884. static int __init init_au1000(void)
  1885. {
  1886. info("stevel@mvista.com, built " __TIME__ " on " __DATE__);
  1887. return au1000_probe();
  1888. }
  1889. static void __exit cleanup_au1000(void)
  1890. {
  1891. info("unloading");
  1892. au1000_remove();
  1893. }
  1894. module_init(init_au1000);
  1895. module_exit(cleanup_au1000);
  1896. /* --------------------------------------------------------------------- */
  1897. #ifndef MODULE
  1898. static int __init au1000_setup(char *options)
  1899. {
  1900. char           *this_opt;
  1901. if (!options || !*options)
  1902. return 0;
  1903. for(this_opt=strtok(options, ",");
  1904.     this_opt; this_opt=strtok(NULL, ",")) {
  1905. if (!strncmp(this_opt, "vra", 3)) {
  1906. vra = 1;
  1907. }
  1908. }
  1909. return 1;
  1910. }
  1911. __setup("au1000_audio=", au1000_setup);
  1912. #endif /* MODULE */