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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  Copyright 1999 Jaroslav Kysela <perex@suse.cz>
  3.  *  Copyright 2000 Alan Cox <alan@redhat.com>
  4.  *  Copyright 2001 Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
  5.  *  Copyright 2002 Pete Zaitcev <zaitcev@yahoo.com>
  6.  *
  7.  *  Yamaha YMF7xx driver.
  8.  *
  9.  *  This code is a result of high-speed collision
  10.  *  between ymfpci.c of ALSA and cs46xx.c of Linux.
  11.  *  -- Pete Zaitcev <zaitcev@yahoo.com>; 2000/09/18
  12.  *
  13.  *   This program is free software; you can redistribute it and/or modify
  14.  *   it under the terms of the GNU General Public License as published by
  15.  *   the Free Software Foundation; either version 2 of the License, or
  16.  *   (at your option) any later version.
  17.  *
  18.  *   This program is distributed in the hope that it will be useful,
  19.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  *   GNU General Public License for more details.
  22.  *
  23.  *   You should have received a copy of the GNU General Public License
  24.  *   along with this program; if not, write to the Free Software
  25.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  26.  *
  27.  * TODO:
  28.  *  - Use P44Slot for 44.1 playback (beware of idle buzzing in P44Slot).
  29.  *  - 96KHz playback for DVD - use pitch of 2.0.
  30.  *  - Retain DMA buffer on close, do not wait the end of frame.
  31.  *  - Resolve XXX tagged questions.
  32.  *  - Cannot play 5133Hz.
  33.  *  - 2001/01/07 Consider if we can remove voice_lock, like so:
  34.  *     : Allocate/deallocate voices in open/close under semafore.
  35.  *     : We access voices in interrupt, that only for pcms that open.
  36.  *    voice_lock around playback_prepare closes interrupts for insane duration.
  37.  *  - Revisit the way voice_alloc is done - too confusing, overcomplicated.
  38.  *    Should support various channel types, however.
  39.  *  - Remove prog_dmabuf from read/write, leave it in open.
  40.  *  - 2001/01/07 Replace the OPL3 part of CONFIG_SOUND_YMFPCI_LEGACY code with
  41.  *    native synthesizer through a playback slot.
  42.  *  - 2001/11/29 ac97_save_state
  43.  *    Talk to Kai to remove ac97_save_state before it's too late!
  44.  *  - Second AC97
  45.  *  - Restore S/PDIF - Toshibas have it.
  46.  *
  47.  * Kai used pci_alloc_consistent for DMA buffer, which sounds a little
  48.  * unconventional. However, given how small our fragments can be,
  49.  * a little uncached access is perhaps better than endless flushing.
  50.  * On i386 and other I/O-coherent architectures pci_alloc_consistent
  51.  * is entirely harmless.
  52.  */
  53. #include <linux/config.h>
  54. #include <linux/module.h>
  55. #include <linux/init.h>
  56. #include <linux/ioport.h>
  57. #include <linux/delay.h>
  58. #include <linux/pci.h>
  59. #include <linux/slab.h>
  60. #include <linux/poll.h>
  61. #include <linux/soundcard.h>
  62. #include <linux/ac97_codec.h>
  63. #include <linux/sound.h>
  64. #include <asm/io.h>
  65. #include <asm/dma.h>
  66. #include <asm/uaccess.h>
  67. #ifdef CONFIG_SOUND_YMFPCI_LEGACY
  68. # include "sound_config.h"
  69. # include "mpu401.h"
  70. #endif
  71. #include "ymfpci.h"
  72. /*
  73.  * I do not believe in debug levels as I never can guess what
  74.  * part of the code is going to be problematic in the future.
  75.  * Don't forget to run your klogd with -c 8.
  76.  *
  77.  * Example (do not remove):
  78.  * #define YMFDBG(fmt, arg...)  do{ printk(KERN_DEBUG fmt, ##arg); }while(0)
  79.  */
  80. #define YMFDBGW(fmt, arg...)  /* */ /* write counts */
  81. #define YMFDBGI(fmt, arg...)  /* */ /* interrupts */
  82. #define YMFDBGX(fmt, arg...)  /* */ /* ioctl */
  83. static int ymf_playback_trigger(ymfpci_t *unit, struct ymf_pcm *ypcm, int cmd);
  84. static void ymf_capture_trigger(ymfpci_t *unit, struct ymf_pcm *ypcm, int cmd);
  85. static void ymfpci_voice_free(ymfpci_t *unit, ymfpci_voice_t *pvoice);
  86. static int ymf_capture_alloc(struct ymf_unit *unit, int *pbank);
  87. static int ymf_playback_prepare(struct ymf_state *state);
  88. static int ymf_capture_prepare(struct ymf_state *state);
  89. static struct ymf_state *ymf_state_alloc(ymfpci_t *unit);
  90. static void ymfpci_aclink_reset(struct pci_dev * pci);
  91. static void ymfpci_disable_dsp(ymfpci_t *unit);
  92. static void ymfpci_download_image(ymfpci_t *codec);
  93. static void ymf_memload(ymfpci_t *unit);
  94. static LIST_HEAD(ymf_devs);
  95. /*
  96.  *  constants
  97.  */
  98. static struct pci_device_id ymf_id_tbl[] __devinitdata = {
  99. #define DEV(v, d, data) 
  100.   { PCI_VENDOR_ID_##v, PCI_DEVICE_ID_##v##_##d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (unsigned long)data }
  101. DEV (YAMAHA, 724,  "YMF724"),
  102. DEV (YAMAHA, 724F, "YMF724F"),
  103. DEV (YAMAHA, 740,  "YMF740"),
  104. DEV (YAMAHA, 740C, "YMF740C"),
  105. DEV (YAMAHA, 744,  "YMF744"),
  106. DEV (YAMAHA, 754,  "YMF754"),
  107. #undef DEV
  108. { }
  109. };
  110. MODULE_DEVICE_TABLE(pci, ymf_id_tbl);
  111. /*
  112.  *  common I/O routines
  113.  */
  114. static inline u8 ymfpci_readb(ymfpci_t *codec, u32 offset)
  115. {
  116. return readb(codec->reg_area_virt + offset);
  117. }
  118. static inline void ymfpci_writeb(ymfpci_t *codec, u32 offset, u8 val)
  119. {
  120. writeb(val, codec->reg_area_virt + offset);
  121. }
  122. static inline u16 ymfpci_readw(ymfpci_t *codec, u32 offset)
  123. {
  124. return readw(codec->reg_area_virt + offset);
  125. }
  126. static inline void ymfpci_writew(ymfpci_t *codec, u32 offset, u16 val)
  127. {
  128. writew(val, codec->reg_area_virt + offset);
  129. }
  130. static inline u32 ymfpci_readl(ymfpci_t *codec, u32 offset)
  131. {
  132. return readl(codec->reg_area_virt + offset);
  133. }
  134. static inline void ymfpci_writel(ymfpci_t *codec, u32 offset, u32 val)
  135. {
  136. writel(val, codec->reg_area_virt + offset);
  137. }
  138. static int ymfpci_codec_ready(ymfpci_t *codec, int secondary, int sched)
  139. {
  140. signed long end_time;
  141. u32 reg = secondary ? YDSXGR_SECSTATUSADR : YDSXGR_PRISTATUSADR;
  142. end_time = jiffies + 3 * (HZ / 4);
  143. do {
  144. if ((ymfpci_readw(codec, reg) & 0x8000) == 0)
  145. return 0;
  146. if (sched) {
  147. set_current_state(TASK_UNINTERRUPTIBLE);
  148. schedule_timeout(1);
  149. }
  150. } while (end_time - (signed long)jiffies >= 0);
  151. printk(KERN_ERR "ymfpci_codec_ready: codec %i is not ready [0x%x]n",
  152.     secondary, ymfpci_readw(codec, reg));
  153. return -EBUSY;
  154. }
  155. static void ymfpci_codec_write(struct ac97_codec *dev, u8 reg, u16 val)
  156. {
  157. ymfpci_t *codec = dev->private_data;
  158. u32 cmd;
  159. /* XXX Do make use of dev->id */
  160. ymfpci_codec_ready(codec, 0, 0);
  161. cmd = ((YDSXG_AC97WRITECMD | reg) << 16) | val;
  162. ymfpci_writel(codec, YDSXGR_AC97CMDDATA, cmd);
  163. }
  164. static u16 ymfpci_codec_read(struct ac97_codec *dev, u8 reg)
  165. {
  166. ymfpci_t *unit = dev->private_data;
  167. int i;
  168. if (ymfpci_codec_ready(unit, 0, 0))
  169. return ~0;
  170. ymfpci_writew(unit, YDSXGR_AC97CMDADR, YDSXG_AC97READCMD | reg);
  171. if (ymfpci_codec_ready(unit, 0, 0))
  172. return ~0;
  173. if (unit->pci->device == PCI_DEVICE_ID_YAMAHA_744 && unit->rev < 2) {
  174. for (i = 0; i < 600; i++)
  175. ymfpci_readw(unit, YDSXGR_PRISTATUSDATA);
  176. }
  177. return ymfpci_readw(unit, YDSXGR_PRISTATUSDATA);
  178. }
  179. /*
  180.  *  Misc routines
  181.  */
  182. /*
  183.  * Calculate the actual sampling rate relatetively to the base clock (48kHz).
  184.  */
  185. static u32 ymfpci_calc_delta(u32 rate)
  186. {
  187. switch (rate) {
  188. case 8000: return 0x02aaab00;
  189. case 11025: return 0x03accd00;
  190. case 16000: return 0x05555500;
  191. case 22050: return 0x07599a00;
  192. case 32000: return 0x0aaaab00;
  193. case 44100: return 0x0eb33300;
  194. default: return ((rate << 16) / 48000) << 12;
  195. }
  196. }
  197. static u32 def_rate[8] = {
  198. 100, 2000, 8000, 11025, 16000, 22050, 32000, 48000
  199. };
  200. static u32 ymfpci_calc_lpfK(u32 rate)
  201. {
  202. u32 i;
  203. static u32 val[8] = {
  204. 0x00570000, 0x06AA0000, 0x18B20000, 0x20930000,
  205. 0x2B9A0000, 0x35A10000, 0x3EAA0000, 0x40000000
  206. };
  207. if (rate == 44100)
  208. return 0x40000000; /* FIXME: What's the right value? */
  209. for (i = 0; i < 8; i++)
  210. if (rate <= def_rate[i])
  211. return val[i];
  212. return val[0];
  213. }
  214. static u32 ymfpci_calc_lpfQ(u32 rate)
  215. {
  216. u32 i;
  217. static u32 val[8] = {
  218. 0x35280000, 0x34A70000, 0x32020000, 0x31770000,
  219. 0x31390000, 0x31C90000, 0x33D00000, 0x40000000
  220. };
  221. if (rate == 44100)
  222. return 0x370A0000;
  223. for (i = 0; i < 8; i++)
  224. if (rate <= def_rate[i])
  225. return val[i];
  226. return val[0];
  227. }
  228. static u32 ymf_calc_lend(u32 rate)
  229. {
  230. return (rate * YMF_SAMPF) / 48000;
  231. }
  232. /*
  233.  * We ever allow only a few formats, but let's be generic, for smaller surprise.
  234.  */
  235. static int ymf_pcm_format_width(int format)
  236. {
  237. static int mask16 = AFMT_S16_LE|AFMT_S16_BE|AFMT_U16_LE|AFMT_U16_BE;
  238. if ((format & (format-1)) != 0) {
  239. printk(KERN_ERR "ymfpci: format 0x%x is not a power of 2n", format);
  240. return 8;
  241. }
  242. if (format == AFMT_IMA_ADPCM) return 4;
  243. if ((format & mask16) != 0) return 16;
  244. return 8;
  245. }
  246. static void ymf_pcm_update_shift(struct ymf_pcm_format *f)
  247. {
  248. f->shift = 0;
  249. if (f->voices == 2)
  250. f->shift++;
  251. if (ymf_pcm_format_width(f->format) == 16)
  252. f->shift++;
  253. }
  254. /* Are you sure 32K is not too much? See if mpg123 skips on loaded systems. */
  255. #define DMABUF_DEFAULTORDER (15-PAGE_SHIFT)
  256. #define DMABUF_MINORDER 1
  257. /*
  258.  * Allocate DMA buffer
  259.  */
  260. static int alloc_dmabuf(ymfpci_t *unit, struct ymf_dmabuf *dmabuf)
  261. {
  262. void *rawbuf = NULL;
  263. dma_addr_t dma_addr;
  264. int order;
  265. struct page *map, *mapend;
  266. /* alloc as big a chunk as we can */
  267. for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--) {
  268. rawbuf = pci_alloc_consistent(unit->pci, PAGE_SIZE << order, &dma_addr);
  269. if (rawbuf)
  270. break;
  271. }
  272. if (!rawbuf)
  273. return -ENOMEM;
  274. #if 0
  275. printk(KERN_DEBUG "ymfpci: allocated %ld (order = %d) bytes at %pn",
  276.        PAGE_SIZE << order, order, rawbuf);
  277. #endif
  278. dmabuf->ready  = dmabuf->mapped = 0;
  279. dmabuf->rawbuf = rawbuf;
  280. dmabuf->dma_addr = dma_addr;
  281. dmabuf->buforder = order;
  282. /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
  283. mapend = virt_to_page(rawbuf + (PAGE_SIZE << order) - 1);
  284. for (map = virt_to_page(rawbuf); map <= mapend; map++)
  285. set_bit(PG_reserved, &map->flags);
  286. return 0;
  287. }
  288. /*
  289.  * Free DMA buffer
  290.  */
  291. static void dealloc_dmabuf(ymfpci_t *unit, struct ymf_dmabuf *dmabuf)
  292. {
  293. struct page *map, *mapend;
  294. if (dmabuf->rawbuf) {
  295. /* undo marking the pages as reserved */
  296. mapend = virt_to_page(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1);
  297. for (map = virt_to_page(dmabuf->rawbuf); map <= mapend; map++)
  298. clear_bit(PG_reserved, &map->flags);
  299. pci_free_consistent(unit->pci, PAGE_SIZE << dmabuf->buforder,
  300.     dmabuf->rawbuf, dmabuf->dma_addr);
  301. }
  302. dmabuf->rawbuf = NULL;
  303. dmabuf->mapped = dmabuf->ready = 0;
  304. }
  305. static int prog_dmabuf(struct ymf_state *state, int rec)
  306. {
  307. struct ymf_dmabuf *dmabuf;
  308. int w_16;
  309. unsigned bufsize;
  310. unsigned long flags;
  311. int redzone, redfrags;
  312. int ret;
  313. w_16 = ymf_pcm_format_width(state->format.format) == 16;
  314. dmabuf = rec ? &state->rpcm.dmabuf : &state->wpcm.dmabuf;
  315. spin_lock_irqsave(&state->unit->reg_lock, flags);
  316. dmabuf->hwptr = dmabuf->swptr = 0;
  317. dmabuf->total_bytes = 0;
  318. dmabuf->count = 0;
  319. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  320. /* allocate DMA buffer if not allocated yet */
  321. if (!dmabuf->rawbuf)
  322. if ((ret = alloc_dmabuf(state->unit, dmabuf)))
  323. return ret;
  324. /*
  325.  * Create fake fragment sizes and numbers for OSS ioctls.
  326.  * Import what Doom might have set with SNDCTL_DSP_SETFRAGMENT.
  327.  */
  328. bufsize = PAGE_SIZE << dmabuf->buforder;
  329. /* By default we give 4 big buffers. */
  330. dmabuf->fragshift = (dmabuf->buforder + PAGE_SHIFT - 2);
  331. if (dmabuf->ossfragshift > 3 &&
  332.     dmabuf->ossfragshift < dmabuf->fragshift) {
  333. /* If OSS set smaller fragments, give more smaller buffers. */
  334. dmabuf->fragshift = dmabuf->ossfragshift;
  335. }
  336. dmabuf->fragsize = 1 << dmabuf->fragshift;
  337. dmabuf->numfrag = bufsize >> dmabuf->fragshift;
  338. dmabuf->dmasize = dmabuf->numfrag << dmabuf->fragshift;
  339. if (dmabuf->ossmaxfrags >= 2) {
  340. redzone = ymf_calc_lend(state->format.rate);
  341. redzone <<= state->format.shift;
  342. redzone *= 3;
  343. redfrags = (redzone + dmabuf->fragsize-1) >> dmabuf->fragshift;
  344. if (dmabuf->ossmaxfrags + redfrags < dmabuf->numfrag) {
  345. dmabuf->numfrag = dmabuf->ossmaxfrags + redfrags;
  346. dmabuf->dmasize = dmabuf->numfrag << dmabuf->fragshift;
  347. }
  348. }
  349. memset(dmabuf->rawbuf, w_16 ? 0 : 0x80, dmabuf->dmasize);
  350. /*
  351.  * Now set up the ring 
  352.  */
  353. /* XXX   ret = rec? cap_pre(): pbk_pre();  */
  354. spin_lock_irqsave(&state->unit->voice_lock, flags);
  355. if (rec) {
  356. if ((ret = ymf_capture_prepare(state)) != 0) {
  357. spin_unlock_irqrestore(&state->unit->voice_lock, flags);
  358. return ret;
  359. }
  360. } else {
  361. if ((ret = ymf_playback_prepare(state)) != 0) {
  362. spin_unlock_irqrestore(&state->unit->voice_lock, flags);
  363. return ret;
  364. }
  365. }
  366. spin_unlock_irqrestore(&state->unit->voice_lock, flags);
  367. /* set the ready flag for the dma buffer (this comment is not stupid) */
  368. dmabuf->ready = 1;
  369. #if 0
  370. printk(KERN_DEBUG "prog_dmabuf: rate %d format 0x%x,"
  371.     " numfrag %d fragsize %d dmasize %dn",
  372.        state->format.rate, state->format.format, dmabuf->numfrag,
  373.        dmabuf->fragsize, dmabuf->dmasize);
  374. #endif
  375. return 0;
  376. }
  377. static void ymf_start_dac(struct ymf_state *state)
  378. {
  379. ymf_playback_trigger(state->unit, &state->wpcm, 1);
  380. }
  381. // static void ymf_start_adc(struct ymf_state *state)
  382. // {
  383. //  ymf_capture_trigger(state->unit, &state->rpcm, 1);
  384. // }
  385. /*
  386.  * Wait until output is drained.
  387.  * This does not kill the hardware for the sake of ioctls.
  388.  */
  389. static void ymf_wait_dac(struct ymf_state *state)
  390. {
  391. struct ymf_unit *unit = state->unit;
  392. struct ymf_pcm *ypcm = &state->wpcm;
  393. DECLARE_WAITQUEUE(waita, current);
  394. unsigned long flags;
  395. add_wait_queue(&ypcm->dmabuf.wait, &waita);
  396. spin_lock_irqsave(&unit->reg_lock, flags);
  397. if (ypcm->dmabuf.count != 0 && !ypcm->running) {
  398. ymf_playback_trigger(unit, ypcm, 1);
  399. }
  400. #if 0
  401. if (file->f_flags & O_NONBLOCK) {
  402. /*
  403.  * XXX Our  mistake is to attach DMA buffer to state
  404.  * rather than to some per-device structure.
  405.  * Cannot skip waiting, can only make it shorter.
  406.  */
  407. }
  408. #endif
  409. set_current_state(TASK_UNINTERRUPTIBLE);
  410. while (ypcm->running) {
  411. spin_unlock_irqrestore(&unit->reg_lock, flags);
  412. schedule();
  413. spin_lock_irqsave(&unit->reg_lock, flags);
  414. set_current_state(TASK_UNINTERRUPTIBLE);
  415. }
  416. spin_unlock_irqrestore(&unit->reg_lock, flags);
  417. set_current_state(TASK_RUNNING);
  418. remove_wait_queue(&ypcm->dmabuf.wait, &waita);
  419. /*
  420.  * This function may take up to 4 seconds to reach this point
  421.  * (32K circular buffer, 8000 Hz). User notices.
  422.  */
  423. }
  424. /* Can just stop, without wait. Or can we? */
  425. static void ymf_stop_adc(struct ymf_state *state)
  426. {
  427. struct ymf_unit *unit = state->unit;
  428. unsigned long flags;
  429. spin_lock_irqsave(&unit->reg_lock, flags);
  430. ymf_capture_trigger(unit, &state->rpcm, 0);
  431. spin_unlock_irqrestore(&unit->reg_lock, flags);
  432. }
  433. /*
  434.  *  Hardware start management
  435.  */
  436. static void ymfpci_hw_start(ymfpci_t *unit)
  437. {
  438. unsigned long flags;
  439. spin_lock_irqsave(&unit->reg_lock, flags);
  440. if (unit->start_count++ == 0) {
  441. ymfpci_writel(unit, YDSXGR_MODE,
  442.     ymfpci_readl(unit, YDSXGR_MODE) | 3);
  443. unit->active_bank = ymfpci_readl(unit, YDSXGR_CTRLSELECT) & 1;
  444. }
  445. spin_unlock_irqrestore(&unit->reg_lock, flags);
  446. }
  447. static void ymfpci_hw_stop(ymfpci_t *unit)
  448. {
  449. unsigned long flags;
  450. long timeout = 1000;
  451. spin_lock_irqsave(&unit->reg_lock, flags);
  452. if (--unit->start_count == 0) {
  453. ymfpci_writel(unit, YDSXGR_MODE,
  454.     ymfpci_readl(unit, YDSXGR_MODE) & ~3);
  455. while (timeout-- > 0) {
  456. if ((ymfpci_readl(unit, YDSXGR_STATUS) & 2) == 0)
  457. break;
  458. }
  459. }
  460. spin_unlock_irqrestore(&unit->reg_lock, flags);
  461. }
  462. /*
  463.  *  Playback voice management
  464.  */
  465. static int voice_alloc(ymfpci_t *codec, ymfpci_voice_type_t type, int pair, ymfpci_voice_t *rvoice[])
  466. {
  467. ymfpci_voice_t *voice, *voice2;
  468. int idx;
  469. for (idx = 0; idx < YDSXG_PLAYBACK_VOICES; idx += pair ? 2 : 1) {
  470. voice = &codec->voices[idx];
  471. voice2 = pair ? &codec->voices[idx+1] : NULL;
  472. if (voice->use || (voice2 && voice2->use))
  473. continue;
  474. voice->use = 1;
  475. if (voice2)
  476. voice2->use = 1;
  477. switch (type) {
  478. case YMFPCI_PCM:
  479. voice->pcm = 1;
  480. if (voice2)
  481. voice2->pcm = 1;
  482. break;
  483. case YMFPCI_SYNTH:
  484. voice->synth = 1;
  485. break;
  486. case YMFPCI_MIDI:
  487. voice->midi = 1;
  488. break;
  489. }
  490. ymfpci_hw_start(codec);
  491. rvoice[0] = voice;
  492. if (voice2) {
  493. ymfpci_hw_start(codec);
  494. rvoice[1] = voice2;
  495. }
  496. return 0;
  497. }
  498. return -EBUSY; /* Your audio channel is open by someone else. */
  499. }
  500. static void ymfpci_voice_free(ymfpci_t *unit, ymfpci_voice_t *pvoice)
  501. {
  502. ymfpci_hw_stop(unit);
  503. pvoice->use = pvoice->pcm = pvoice->synth = pvoice->midi = 0;
  504. pvoice->ypcm = NULL;
  505. }
  506. /*
  507.  */
  508. static void ymf_pcm_interrupt(ymfpci_t *codec, ymfpci_voice_t *voice)
  509. {
  510. struct ymf_pcm *ypcm;
  511. int redzone;
  512. int pos, delta, swptr;
  513. int played, distance;
  514. struct ymf_state *state;
  515. struct ymf_dmabuf *dmabuf;
  516. char silence;
  517. if ((ypcm = voice->ypcm) == NULL) {
  518. return;
  519. }
  520. if ((state = ypcm->state) == NULL) {
  521. ypcm->running = 0; // lock it
  522. return;
  523. }
  524. dmabuf = &ypcm->dmabuf;
  525. spin_lock(&codec->reg_lock);
  526. if (ypcm->running) {
  527. YMFDBGI("ymfpci: %d, intr bank %d count %d start 0x%x:%xn",
  528.    voice->number, codec->active_bank, dmabuf->count,
  529.    le32_to_cpu(voice->bank[0].start),
  530.    le32_to_cpu(voice->bank[1].start));
  531. silence = (ymf_pcm_format_width(state->format.format) == 16) ?
  532.     0 : 0x80;
  533. /* We need actual left-hand-side redzone size here. */
  534. redzone = ymf_calc_lend(state->format.rate);
  535. redzone <<= (state->format.shift + 1);
  536. swptr = dmabuf->swptr;
  537. pos = le32_to_cpu(voice->bank[codec->active_bank].start);
  538. pos <<= state->format.shift;
  539. if (pos < 0 || pos >= dmabuf->dmasize) { /* ucode bug */
  540. printk(KERN_ERR "ymfpci%d: runaway voice %d: hwptr %d=>%d dmasize %dn",
  541.     codec->dev_audio, voice->number,
  542.     dmabuf->hwptr, pos, dmabuf->dmasize);
  543. pos = 0;
  544. }
  545. if (pos < dmabuf->hwptr) {
  546. delta = dmabuf->dmasize - dmabuf->hwptr;
  547. memset(dmabuf->rawbuf + dmabuf->hwptr, silence, delta);
  548. delta += pos;
  549. memset(dmabuf->rawbuf, silence, pos);
  550. } else {
  551. delta = pos - dmabuf->hwptr;
  552. memset(dmabuf->rawbuf + dmabuf->hwptr, silence, delta);
  553. }
  554. dmabuf->hwptr = pos;
  555. if (dmabuf->count == 0) {
  556. printk(KERN_ERR "ymfpci%d: %d: strain: hwptr %dn",
  557.     codec->dev_audio, voice->number, dmabuf->hwptr);
  558. ymf_playback_trigger(codec, ypcm, 0);
  559. }
  560. if (swptr <= pos) {
  561. distance = pos - swptr;
  562. } else {
  563. distance = dmabuf->dmasize - (swptr - pos);
  564. }
  565. if (distance < redzone) {
  566. /*
  567.  * hwptr inside redzone => DMA ran out of samples.
  568.  */
  569. if (delta < dmabuf->count) {
  570. /*
  571.  * Lost interrupt or other screwage.
  572.  */
  573. printk(KERN_ERR "ymfpci%d: %d: lost: delta %d"
  574.     " hwptr %d swptr %d distance %d count %dn",
  575.     codec->dev_audio, voice->number, delta,
  576.     dmabuf->hwptr, swptr, distance, dmabuf->count);
  577. } else {
  578. /*
  579.  * Normal end of DMA.
  580.  */
  581. YMFDBGI("ymfpci%d: %d: done: delta %d"
  582.     " hwptr %d swptr %d distance %d count %dn",
  583.     codec->dev_audio, voice->number, delta,
  584.     dmabuf->hwptr, swptr, distance, dmabuf->count);
  585. }
  586. played = dmabuf->count;
  587. if (ypcm->running) {
  588. ymf_playback_trigger(codec, ypcm, 0);
  589. }
  590. } else {
  591. /*
  592.  * hwptr is chipping away towards a remote swptr.
  593.  * Calculate other distance and apply it to count.
  594.  */
  595. if (swptr >= pos) {
  596. distance = swptr - pos;
  597. } else {
  598. distance = dmabuf->dmasize - (pos - swptr);
  599. }
  600. if (distance < dmabuf->count) {
  601. played = dmabuf->count - distance;
  602. } else {
  603. played = 0;
  604. }
  605. }
  606. dmabuf->total_bytes += played;
  607. dmabuf->count -= played;
  608. if (dmabuf->count < dmabuf->dmasize / 2) {
  609. wake_up(&dmabuf->wait);
  610. }
  611. }
  612. spin_unlock(&codec->reg_lock);
  613. }
  614. static void ymf_cap_interrupt(ymfpci_t *unit, struct ymf_capture *cap)
  615. {
  616. struct ymf_pcm *ypcm;
  617. int redzone;
  618. struct ymf_state *state;
  619. struct ymf_dmabuf *dmabuf;
  620. int pos, delta;
  621. int cnt;
  622. if ((ypcm = cap->ypcm) == NULL) {
  623. return;
  624. }
  625. if ((state = ypcm->state) == NULL) {
  626. ypcm->running = 0; // lock it
  627. return;
  628. }
  629. dmabuf = &ypcm->dmabuf;
  630. spin_lock(&unit->reg_lock);
  631. if (ypcm->running) {
  632. redzone = ymf_calc_lend(state->format.rate);
  633. redzone <<= (state->format.shift + 1);
  634. pos = le32_to_cpu(cap->bank[unit->active_bank].start);
  635. // pos <<= state->format.shift;
  636. if (pos < 0 || pos >= dmabuf->dmasize) { /* ucode bug */
  637. printk(KERN_ERR "ymfpci%d: runaway capture %d: hwptr %d=>%d dmasize %dn",
  638.     unit->dev_audio, ypcm->capture_bank_number,
  639.     dmabuf->hwptr, pos, dmabuf->dmasize);
  640. pos = 0;
  641. }
  642. if (pos < dmabuf->hwptr) {
  643. delta = dmabuf->dmasize - dmabuf->hwptr;
  644. delta += pos;
  645. } else {
  646. delta = pos - dmabuf->hwptr;
  647. }
  648. dmabuf->hwptr = pos;
  649. cnt = dmabuf->count;
  650. cnt += delta;
  651. if (cnt + redzone > dmabuf->dmasize) {
  652. /* Overflow - bump swptr */
  653. dmabuf->count = dmabuf->dmasize - redzone;
  654. dmabuf->swptr = dmabuf->hwptr + redzone;
  655. if (dmabuf->swptr >= dmabuf->dmasize) {
  656. dmabuf->swptr -= dmabuf->dmasize;
  657. }
  658. } else {
  659. dmabuf->count = cnt;
  660. }
  661. dmabuf->total_bytes += delta;
  662. if (dmabuf->count) { /* && is_sleeping  XXX */
  663. wake_up(&dmabuf->wait);
  664. }
  665. }
  666. spin_unlock(&unit->reg_lock);
  667. }
  668. static int ymf_playback_trigger(ymfpci_t *codec, struct ymf_pcm *ypcm, int cmd)
  669. {
  670. if (ypcm->voices[0] == NULL) {
  671. return -EINVAL;
  672. }
  673. if (cmd != 0) {
  674. codec->ctrl_playback[ypcm->voices[0]->number + 1] =
  675.     cpu_to_le32(ypcm->voices[0]->bank_ba);
  676. if (ypcm->voices[1] != NULL)
  677. codec->ctrl_playback[ypcm->voices[1]->number + 1] =
  678.     cpu_to_le32(ypcm->voices[1]->bank_ba);
  679. ypcm->running = 1;
  680. } else {
  681. codec->ctrl_playback[ypcm->voices[0]->number + 1] = 0;
  682. if (ypcm->voices[1] != NULL)
  683. codec->ctrl_playback[ypcm->voices[1]->number + 1] = 0;
  684. ypcm->running = 0;
  685. }
  686. return 0;
  687. }
  688. static void ymf_capture_trigger(ymfpci_t *codec, struct ymf_pcm *ypcm, int cmd)
  689. {
  690. u32 tmp;
  691. if (cmd != 0) {
  692. tmp = ymfpci_readl(codec, YDSXGR_MAPOFREC) | (1 << ypcm->capture_bank_number);
  693. ymfpci_writel(codec, YDSXGR_MAPOFREC, tmp);
  694. ypcm->running = 1;
  695. } else {
  696. tmp = ymfpci_readl(codec, YDSXGR_MAPOFREC) & ~(1 << ypcm->capture_bank_number);
  697. ymfpci_writel(codec, YDSXGR_MAPOFREC, tmp);
  698. ypcm->running = 0;
  699. }
  700. }
  701. static int ymfpci_pcm_voice_alloc(struct ymf_pcm *ypcm, int voices)
  702. {
  703. struct ymf_unit *unit;
  704. int err;
  705. unit = ypcm->state->unit;
  706. if (ypcm->voices[1] != NULL && voices < 2) {
  707. ymfpci_voice_free(unit, ypcm->voices[1]);
  708. ypcm->voices[1] = NULL;
  709. }
  710. if (voices == 1 && ypcm->voices[0] != NULL)
  711. return 0; /* already allocated */
  712. if (voices == 2 && ypcm->voices[0] != NULL && ypcm->voices[1] != NULL)
  713. return 0; /* already allocated */
  714. if (voices > 1) {
  715. if (ypcm->voices[0] != NULL && ypcm->voices[1] == NULL) {
  716. ymfpci_voice_free(unit, ypcm->voices[0]);
  717. ypcm->voices[0] = NULL;
  718. }
  719. if ((err = voice_alloc(unit, YMFPCI_PCM, 1, ypcm->voices)) < 0)
  720. return err;
  721. ypcm->voices[0]->ypcm = ypcm;
  722. ypcm->voices[1]->ypcm = ypcm;
  723. } else {
  724. if ((err = voice_alloc(unit, YMFPCI_PCM, 0, ypcm->voices)) < 0)
  725. return err;
  726. ypcm->voices[0]->ypcm = ypcm;
  727. }
  728. return 0;
  729. }
  730. static void ymf_pcm_init_voice(ymfpci_voice_t *voice, int stereo,
  731.     int rate, int w_16, unsigned long addr, unsigned int end, int spdif)
  732. {
  733. u32 format;
  734. u32 delta = ymfpci_calc_delta(rate);
  735. u32 lpfQ = ymfpci_calc_lpfQ(rate);
  736. u32 lpfK = ymfpci_calc_lpfK(rate);
  737. ymfpci_playback_bank_t *bank;
  738. int nbank;
  739. /*
  740.  * The gain is a floating point number. According to the manual,
  741.  * bit 31 indicates a sign bit, bit 30 indicates an integer part,
  742.  * and bits [29:15] indicate a decimal fraction part. Thus,
  743.  * for a gain of 1.0 the constant of 0x40000000 is loaded.
  744.  */
  745. unsigned default_gain = cpu_to_le32(0x40000000);
  746. format = (stereo ? 0x00010000 : 0) | (w_16 ? 0 : 0x80000000);
  747. if (stereo)
  748. end >>= 1;
  749. if (w_16)
  750. end >>= 1;
  751. for (nbank = 0; nbank < 2; nbank++) {
  752. bank = &voice->bank[nbank];
  753. bank->format = cpu_to_le32(format);
  754. bank->loop_default = 0; /* 0-loops forever, otherwise count */
  755. bank->base = cpu_to_le32(addr);
  756. bank->loop_start = 0;
  757. bank->loop_end = cpu_to_le32(end);
  758. bank->loop_frac = 0;
  759. bank->eg_gain_end = default_gain;
  760. bank->lpfQ = cpu_to_le32(lpfQ);
  761. bank->status = 0;
  762. bank->num_of_frames = 0;
  763. bank->loop_count = 0;
  764. bank->start = 0;
  765. bank->start_frac = 0;
  766. bank->delta =
  767. bank->delta_end = cpu_to_le32(delta);
  768. bank->lpfK =
  769. bank->lpfK_end = cpu_to_le32(lpfK);
  770. bank->eg_gain = default_gain;
  771. bank->lpfD1 =
  772. bank->lpfD2 = 0;
  773. bank->left_gain = 
  774. bank->right_gain =
  775. bank->left_gain_end =
  776. bank->right_gain_end =
  777. bank->eff1_gain =
  778. bank->eff2_gain =
  779. bank->eff3_gain =
  780. bank->eff1_gain_end =
  781. bank->eff2_gain_end =
  782. bank->eff3_gain_end = 0;
  783. if (!stereo) {
  784. if (!spdif) {
  785. bank->left_gain = 
  786. bank->right_gain =
  787. bank->left_gain_end =
  788. bank->right_gain_end = default_gain;
  789. } else {
  790. bank->eff2_gain =
  791. bank->eff2_gain_end =
  792. bank->eff3_gain =
  793. bank->eff3_gain_end = default_gain;
  794. }
  795. } else {
  796. if (!spdif) {
  797. if ((voice->number & 1) == 0) {
  798. bank->left_gain =
  799. bank->left_gain_end = default_gain;
  800. } else {
  801. bank->format |= cpu_to_le32(1);
  802. bank->right_gain =
  803. bank->right_gain_end = default_gain;
  804. }
  805. } else {
  806. if ((voice->number & 1) == 0) {
  807. bank->eff2_gain =
  808. bank->eff2_gain_end = default_gain;
  809. } else {
  810. bank->format |= cpu_to_le32(1);
  811. bank->eff3_gain =
  812. bank->eff3_gain_end = default_gain;
  813. }
  814. }
  815. }
  816. }
  817. }
  818. /*
  819.  * XXX Capture channel allocation is entirely fake at the moment.
  820.  * We use only one channel and mark it busy as required.
  821.  */
  822. static int ymf_capture_alloc(struct ymf_unit *unit, int *pbank)
  823. {
  824. struct ymf_capture *cap;
  825. int cbank;
  826. cbank = 1; /* Only ADC slot is used for now. */
  827. cap = &unit->capture[cbank];
  828. if (cap->use)
  829. return -EBUSY;
  830. cap->use = 1;
  831. *pbank = cbank;
  832. return 0;
  833. }
  834. static int ymf_playback_prepare(struct ymf_state *state)
  835. {
  836. struct ymf_pcm *ypcm = &state->wpcm;
  837. int err, nvoice;
  838. if ((err = ymfpci_pcm_voice_alloc(ypcm, state->format.voices)) < 0) {
  839. /* Somebody started 32 mpg123's in parallel? */
  840. printk(KERN_INFO "ymfpci%d: cannot allocate voicen",
  841.     state->unit->dev_audio);
  842. return err;
  843. }
  844. for (nvoice = 0; nvoice < state->format.voices; nvoice++) {
  845. ymf_pcm_init_voice(ypcm->voices[nvoice],
  846.     state->format.voices == 2, state->format.rate,
  847.     ymf_pcm_format_width(state->format.format) == 16,
  848.     ypcm->dmabuf.dma_addr, ypcm->dmabuf.dmasize,
  849.     ypcm->spdif);
  850. }
  851. return 0;
  852. }
  853. static int ymf_capture_prepare(struct ymf_state *state)
  854. {
  855. ymfpci_t *unit = state->unit;
  856. struct ymf_pcm *ypcm = &state->rpcm;
  857. ymfpci_capture_bank_t * bank;
  858. /* XXX This is confusing, gotta rename one of them banks... */
  859. int nbank; /* flip-flop bank */
  860. int cbank; /* input [super-]bank */
  861. struct ymf_capture *cap;
  862. u32 rate, format;
  863. if (ypcm->capture_bank_number == -1) {
  864. if (ymf_capture_alloc(unit, &cbank) != 0)
  865. return -EBUSY;
  866. ypcm->capture_bank_number = cbank;
  867. cap = &unit->capture[cbank];
  868. cap->bank = unit->bank_capture[cbank][0];
  869. cap->ypcm = ypcm;
  870. ymfpci_hw_start(unit);
  871. }
  872. // ypcm->frag_size = snd_pcm_lib_transfer_fragment(substream);
  873. // frag_size is replaced with nonfragged byte-aligned rolling buffer
  874. rate = ((48000 * 4096) / state->format.rate) - 1;
  875. format = 0;
  876. if (state->format.voices == 2)
  877. format |= 2;
  878. if (ymf_pcm_format_width(state->format.format) == 8)
  879. format |= 1;
  880. switch (ypcm->capture_bank_number) {
  881. case 0:
  882. ymfpci_writel(unit, YDSXGR_RECFORMAT, format);
  883. ymfpci_writel(unit, YDSXGR_RECSLOTSR, rate);
  884. break;
  885. case 1:
  886. ymfpci_writel(unit, YDSXGR_ADCFORMAT, format);
  887. ymfpci_writel(unit, YDSXGR_ADCSLOTSR, rate);
  888. break;
  889. }
  890. for (nbank = 0; nbank < 2; nbank++) {
  891. bank = unit->bank_capture[ypcm->capture_bank_number][nbank];
  892. bank->base = cpu_to_le32(ypcm->dmabuf.dma_addr);
  893. // bank->loop_end = ypcm->dmabuf.dmasize >> state->format.shift;
  894. bank->loop_end = cpu_to_le32(ypcm->dmabuf.dmasize);
  895. bank->start = 0;
  896. bank->num_of_loops = 0;
  897. }
  898. #if 0 /* s/pdif */
  899. if (state->digital.dig_valid)
  900. /*state->digital.type == SND_PCM_DIG_AES_IEC958*/
  901. ymfpci_writew(codec, YDSXGR_SPDIFOUTSTATUS,
  902.     state->digital.dig_status[0] | (state->digital.dig_status[1] << 8));
  903. #endif
  904. return 0;
  905. }
  906. void ymf_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  907. {
  908. ymfpci_t *codec = dev_id;
  909. u32 status, nvoice, mode;
  910. struct ymf_voice *voice;
  911. struct ymf_capture *cap;
  912. status = ymfpci_readl(codec, YDSXGR_STATUS);
  913. if (status & 0x80000000) {
  914. codec->active_bank = ymfpci_readl(codec, YDSXGR_CTRLSELECT) & 1;
  915. spin_lock(&codec->voice_lock);
  916. for (nvoice = 0; nvoice < YDSXG_PLAYBACK_VOICES; nvoice++) {
  917. voice = &codec->voices[nvoice];
  918. if (voice->use)
  919. ymf_pcm_interrupt(codec, voice);
  920. }
  921. for (nvoice = 0; nvoice < YDSXG_CAPTURE_VOICES; nvoice++) {
  922. cap = &codec->capture[nvoice];
  923. if (cap->use)
  924. ymf_cap_interrupt(codec, cap);
  925. }
  926. spin_unlock(&codec->voice_lock);
  927. spin_lock(&codec->reg_lock);
  928. ymfpci_writel(codec, YDSXGR_STATUS, 0x80000000);
  929. mode = ymfpci_readl(codec, YDSXGR_MODE) | 2;
  930. ymfpci_writel(codec, YDSXGR_MODE, mode);
  931. spin_unlock(&codec->reg_lock);
  932. }
  933. status = ymfpci_readl(codec, YDSXGR_INTFLAG);
  934. if (status & 1) {
  935. /* timer handler */
  936. ymfpci_writel(codec, YDSXGR_INTFLAG, ~0);
  937. }
  938. }
  939. static void ymf_pcm_free_substream(struct ymf_pcm *ypcm)
  940. {
  941. unsigned long flags;
  942. struct ymf_unit *unit;
  943. unit = ypcm->state->unit;
  944. if (ypcm->type == PLAYBACK_VOICE) {
  945. spin_lock_irqsave(&unit->voice_lock, flags);
  946. if (ypcm->voices[1])
  947. ymfpci_voice_free(unit, ypcm->voices[1]);
  948. if (ypcm->voices[0])
  949. ymfpci_voice_free(unit, ypcm->voices[0]);
  950. spin_unlock_irqrestore(&unit->voice_lock, flags);
  951. } else {
  952. if (ypcm->capture_bank_number != -1) {
  953. unit->capture[ypcm->capture_bank_number].use = 0;
  954. ypcm->capture_bank_number = -1;
  955. ymfpci_hw_stop(unit);
  956. }
  957. }
  958. }
  959. static struct ymf_state *ymf_state_alloc(ymfpci_t *unit)
  960. {
  961. struct ymf_pcm *ypcm;
  962. struct ymf_state *state;
  963. if ((state = kmalloc(sizeof(struct ymf_state), GFP_KERNEL)) == NULL) {
  964. goto out0;
  965. }
  966. memset(state, 0, sizeof(struct ymf_state));
  967. ypcm = &state->wpcm;
  968. ypcm->state = state;
  969. ypcm->type = PLAYBACK_VOICE;
  970. ypcm->capture_bank_number = -1;
  971. init_waitqueue_head(&ypcm->dmabuf.wait);
  972. ypcm = &state->rpcm;
  973. ypcm->state = state;
  974. ypcm->type = CAPTURE_AC97;
  975. ypcm->capture_bank_number = -1;
  976. init_waitqueue_head(&ypcm->dmabuf.wait);
  977. state->unit = unit;
  978. state->format.format = AFMT_U8;
  979. state->format.rate = 8000;
  980. state->format.voices = 1;
  981. ymf_pcm_update_shift(&state->format);
  982. return state;
  983. out0:
  984. return NULL;
  985. }
  986. /* AES/IEC958 channel status bits */
  987. #define SND_PCM_AES0_PROFESSIONAL (1<<0) /* 0 = consumer, 1 = professional */
  988. #define SND_PCM_AES0_NONAUDIO (1<<1) /* 0 = audio, 1 = non-audio */
  989. #define SND_PCM_AES0_PRO_EMPHASIS (7<<2) /* mask - emphasis */
  990. #define SND_PCM_AES0_PRO_EMPHASIS_NOTID (0<<2) /* emphasis not indicated */
  991. #define SND_PCM_AES0_PRO_EMPHASIS_NONE (1<<2) /* none emphasis */
  992. #define SND_PCM_AES0_PRO_EMPHASIS_5015 (3<<2) /* 50/15us emphasis */
  993. #define SND_PCM_AES0_PRO_EMPHASIS_CCITT (7<<2) /* CCITT J.17 emphasis */
  994. #define SND_PCM_AES0_PRO_FREQ_UNLOCKED (1<<5) /* source sample frequency: 0 = locked, 1 = unlocked */
  995. #define SND_PCM_AES0_PRO_FS (3<<6) /* mask - sample frequency */
  996. #define SND_PCM_AES0_PRO_FS_NOTID (0<<6) /* fs not indicated */
  997. #define SND_PCM_AES0_PRO_FS_44100 (1<<6) /* 44.1kHz */
  998. #define SND_PCM_AES0_PRO_FS_48000 (2<<6) /* 48kHz */
  999. #define SND_PCM_AES0_PRO_FS_32000 (3<<6) /* 32kHz */
  1000. #define SND_PCM_AES0_CON_NOT_COPYRIGHT (1<<2) /* 0 = copyright, 1 = not copyright */
  1001. #define SND_PCM_AES0_CON_EMPHASIS (7<<3) /* mask - emphasis */
  1002. #define SND_PCM_AES0_CON_EMPHASIS_NONE (0<<3) /* none emphasis */
  1003. #define SND_PCM_AES0_CON_EMPHASIS_5015 (1<<3) /* 50/15us emphasis */
  1004. #define SND_PCM_AES0_CON_MODE (3<<6) /* mask - mode */
  1005. #define SND_PCM_AES1_PRO_MODE (15<<0) /* mask - channel mode */
  1006. #define SND_PCM_AES1_PRO_MODE_NOTID (0<<0) /* not indicated */
  1007. #define SND_PCM_AES1_PRO_MODE_STEREOPHONIC (2<<0) /* stereophonic - ch A is left */
  1008. #define SND_PCM_AES1_PRO_MODE_SINGLE (4<<0) /* single channel */
  1009. #define SND_PCM_AES1_PRO_MODE_TWO (8<<0) /* two channels */
  1010. #define SND_PCM_AES1_PRO_MODE_PRIMARY (12<<0) /* primary/secondary */
  1011. #define SND_PCM_AES1_PRO_MODE_BYTE3 (15<<0) /* vector to byte 3 */
  1012. #define SND_PCM_AES1_PRO_USERBITS (15<<4) /* mask - user bits */
  1013. #define SND_PCM_AES1_PRO_USERBITS_NOTID (0<<4) /* not indicated */
  1014. #define SND_PCM_AES1_PRO_USERBITS_192 (8<<4) /* 192-bit structure */
  1015. #define SND_PCM_AES1_PRO_USERBITS_UDEF (12<<4) /* user defined application */
  1016. #define SND_PCM_AES1_CON_CATEGORY 0x7f
  1017. #define SND_PCM_AES1_CON_GENERAL 0x00
  1018. #define SND_PCM_AES1_CON_EXPERIMENTAL 0x40
  1019. #define SND_PCM_AES1_CON_SOLIDMEM_MASK 0x0f
  1020. #define SND_PCM_AES1_CON_SOLIDMEM_ID 0x08
  1021. #define SND_PCM_AES1_CON_BROADCAST1_MASK 0x07
  1022. #define SND_PCM_AES1_CON_BROADCAST1_ID 0x04
  1023. #define SND_PCM_AES1_CON_DIGDIGCONV_MASK 0x07
  1024. #define SND_PCM_AES1_CON_DIGDIGCONV_ID 0x02
  1025. #define SND_PCM_AES1_CON_ADC_COPYRIGHT_MASK 0x1f
  1026. #define SND_PCM_AES1_CON_ADC_COPYRIGHT_ID 0x06
  1027. #define SND_PCM_AES1_CON_ADC_MASK 0x1f
  1028. #define SND_PCM_AES1_CON_ADC_ID 0x16
  1029. #define SND_PCM_AES1_CON_BROADCAST2_MASK 0x0f
  1030. #define SND_PCM_AES1_CON_BROADCAST2_ID 0x0e
  1031. #define SND_PCM_AES1_CON_LASEROPT_MASK 0x07
  1032. #define SND_PCM_AES1_CON_LASEROPT_ID 0x01
  1033. #define SND_PCM_AES1_CON_MUSICAL_MASK 0x07
  1034. #define SND_PCM_AES1_CON_MUSICAL_ID 0x05
  1035. #define SND_PCM_AES1_CON_MAGNETIC_MASK 0x07
  1036. #define SND_PCM_AES1_CON_MAGNETIC_ID 0x03
  1037. #define SND_PCM_AES1_CON_IEC908_CD (SND_PCM_AES1_CON_LASEROPT_ID|0x00)
  1038. #define SND_PCM_AES1_CON_NON_IEC908_CD (SND_PCM_AES1_CON_LASEROPT_ID|0x08)
  1039. #define SND_PCM_AES1_CON_PCM_CODER (SND_PCM_AES1_CON_DIGDIGCONV_ID|0x00)
  1040. #define SND_PCM_AES1_CON_SAMPLER (SND_PCM_AES1_CON_DIGDIGCONV_ID|0x20)
  1041. #define SND_PCM_AES1_CON_MIXER (SND_PCM_AES1_CON_DIGDIGCONV_ID|0x10)
  1042. #define SND_PCM_AES1_CON_RATE_CONVERTER (SND_PCM_AES1_CON_DIGDIGCONV_ID|0x18)
  1043. #define SND_PCM_AES1_CON_SYNTHESIZER (SND_PCM_AES1_CON_MUSICAL_ID|0x00)
  1044. #define SND_PCM_AES1_CON_MICROPHONE (SND_PCM_AES1_CON_MUSICAL_ID|0x08)
  1045. #define SND_PCM_AES1_CON_DAT (SND_PCM_AES1_CON_MAGNETIC_ID|0x00)
  1046. #define SND_PCM_AES1_CON_VCR (SND_PCM_AES1_CON_MAGNETIC_ID|0x08)
  1047. #define SND_PCM_AES1_CON_ORIGINAL (1<<7) /* this bits depends on the category code */
  1048. #define SND_PCM_AES2_PRO_SBITS (7<<0) /* mask - sample bits */
  1049. #define SND_PCM_AES2_PRO_SBITS_20 (2<<0) /* 20-bit - coordination */
  1050. #define SND_PCM_AES2_PRO_SBITS_24 (4<<0) /* 24-bit - main audio */
  1051. #define SND_PCM_AES2_PRO_SBITS_UDEF (6<<0) /* user defined application */
  1052. #define SND_PCM_AES2_PRO_WORDLEN (7<<3) /* mask - source word length */
  1053. #define SND_PCM_AES2_PRO_WORDLEN_NOTID (0<<3) /* not indicated */
  1054. #define SND_PCM_AES2_PRO_WORDLEN_22_18 (2<<3) /* 22-bit or 18-bit */
  1055. #define SND_PCM_AES2_PRO_WORDLEN_23_19 (4<<3) /* 23-bit or 19-bit */
  1056. #define SND_PCM_AES2_PRO_WORDLEN_24_20 (5<<3) /* 24-bit or 20-bit */
  1057. #define SND_PCM_AES2_PRO_WORDLEN_20_16 (6<<3) /* 20-bit or 16-bit */
  1058. #define SND_PCM_AES2_CON_SOURCE (15<<0) /* mask - source number */
  1059. #define SND_PCM_AES2_CON_SOURCE_UNSPEC (0<<0) /* unspecified */
  1060. #define SND_PCM_AES2_CON_CHANNEL (15<<4) /* mask - channel number */
  1061. #define SND_PCM_AES2_CON_CHANNEL_UNSPEC (0<<4) /* unspecified */
  1062. #define SND_PCM_AES3_CON_FS (15<<0) /* mask - sample frequency */
  1063. #define SND_PCM_AES3_CON_FS_44100 (0<<0) /* 44.1kHz */
  1064. #define SND_PCM_AES3_CON_FS_48000 (2<<0) /* 48kHz */
  1065. #define SND_PCM_AES3_CON_FS_32000 (3<<0) /* 32kHz */
  1066. #define SND_PCM_AES3_CON_CLOCK (3<<4) /* mask - clock accuracy */
  1067. #define SND_PCM_AES3_CON_CLOCK_1000PPM (0<<4) /* 1000 ppm */
  1068. #define SND_PCM_AES3_CON_CLOCK_50PPM (1<<4) /* 50 ppm */
  1069. #define SND_PCM_AES3_CON_CLOCK_VARIABLE (2<<4) /* variable pitch */
  1070. /*
  1071.  * User interface
  1072.  */
  1073. /*
  1074.  * in this loop, dmabuf.count signifies the amount of data that is
  1075.  * waiting to be copied to the user's buffer.  it is filled by the dma
  1076.  * machine and drained by this loop.
  1077.  */
  1078. static ssize_t
  1079. ymf_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
  1080. {
  1081. struct ymf_state *state = (struct ymf_state *)file->private_data;
  1082. struct ymf_dmabuf *dmabuf = &state->rpcm.dmabuf;
  1083. struct ymf_unit *unit = state->unit;
  1084. DECLARE_WAITQUEUE(waita, current);
  1085. ssize_t ret;
  1086. unsigned long flags;
  1087. unsigned int swptr;
  1088. int cnt; /* This many to go in this revolution */
  1089. if (ppos != &file->f_pos)
  1090. return -ESPIPE;
  1091. if (dmabuf->mapped)
  1092. return -ENXIO;
  1093. if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
  1094. return ret;
  1095. ret = 0;
  1096. add_wait_queue(&dmabuf->wait, &waita);
  1097. set_current_state(TASK_INTERRUPTIBLE);
  1098. while (count > 0) {
  1099. spin_lock_irqsave(&unit->reg_lock, flags);
  1100. if (unit->suspended) {
  1101. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1102. schedule();
  1103. set_current_state(TASK_INTERRUPTIBLE);
  1104. if (signal_pending(current)) {
  1105. if (!ret) ret = -EAGAIN;
  1106. break;
  1107. }
  1108. continue;
  1109. }
  1110. swptr = dmabuf->swptr;
  1111. cnt = dmabuf->dmasize - swptr;
  1112. if (dmabuf->count < cnt)
  1113. cnt = dmabuf->count;
  1114. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1115. if (cnt > count)
  1116. cnt = count;
  1117. if (cnt <= 0) {
  1118. unsigned long tmo;
  1119. /* buffer is empty, start the dma machine and wait for data to be
  1120.    recorded */
  1121. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1122. if (!state->rpcm.running) {
  1123. ymf_capture_trigger(state->unit, &state->rpcm, 1);
  1124. }
  1125. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1126. if (file->f_flags & O_NONBLOCK) {
  1127. if (!ret) ret = -EAGAIN;
  1128. break;
  1129. }
  1130. /* This isnt strictly right for the 810  but it'll do */
  1131. tmo = (dmabuf->dmasize * HZ) / (state->format.rate * 2);
  1132. tmo >>= state->format.shift;
  1133. /* There are two situations when sleep_on_timeout returns, one is when
  1134.    the interrupt is serviced correctly and the process is waked up by
  1135.    ISR ON TIME. Another is when timeout is expired, which means that
  1136.    either interrupt is NOT serviced correctly (pending interrupt) or it
  1137.    is TOO LATE for the process to be scheduled to run (scheduler latency)
  1138.    which results in a (potential) buffer overrun. And worse, there is
  1139.    NOTHING we can do to prevent it. */
  1140. tmo = schedule_timeout(tmo);
  1141. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1142. set_current_state(TASK_INTERRUPTIBLE);
  1143. if (tmo == 0 && dmabuf->count == 0) {
  1144. printk(KERN_ERR "ymfpci%d: recording schedule timeout, "
  1145.     "dmasz %u fragsz %u count %i hwptr %u swptr %un",
  1146.     state->unit->dev_audio,
  1147.     dmabuf->dmasize, dmabuf->fragsize, dmabuf->count,
  1148.     dmabuf->hwptr, dmabuf->swptr);
  1149. }
  1150. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1151. if (signal_pending(current)) {
  1152. if (!ret) ret = -ERESTARTSYS;
  1153. break;
  1154. }
  1155. continue;
  1156. }
  1157. if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) {
  1158. if (!ret) ret = -EFAULT;
  1159. break;
  1160. }
  1161. swptr = (swptr + cnt) % dmabuf->dmasize;
  1162. spin_lock_irqsave(&unit->reg_lock, flags);
  1163. if (unit->suspended) {
  1164. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1165. continue;
  1166. }
  1167. dmabuf->swptr = swptr;
  1168. dmabuf->count -= cnt;
  1169. // spin_unlock_irqrestore(&unit->reg_lock, flags);
  1170. count -= cnt;
  1171. buffer += cnt;
  1172. ret += cnt;
  1173. // spin_lock_irqsave(&unit->reg_lock, flags);
  1174. if (!state->rpcm.running) {
  1175. ymf_capture_trigger(unit, &state->rpcm, 1);
  1176. }
  1177. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1178. }
  1179. set_current_state(TASK_RUNNING);
  1180. remove_wait_queue(&dmabuf->wait, &waita);
  1181. return ret;
  1182. }
  1183. static ssize_t
  1184. ymf_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
  1185. {
  1186. struct ymf_state *state = (struct ymf_state *)file->private_data;
  1187. struct ymf_dmabuf *dmabuf = &state->wpcm.dmabuf;
  1188. struct ymf_unit *unit = state->unit;
  1189. DECLARE_WAITQUEUE(waita, current);
  1190. ssize_t ret;
  1191. unsigned long flags;
  1192. unsigned int swptr;
  1193. int cnt; /* This many to go in this revolution */
  1194. int redzone;
  1195. int delay;
  1196. YMFDBGW("ymf_write: count %dn", count);
  1197. if (ppos != &file->f_pos)
  1198. return -ESPIPE;
  1199. if (dmabuf->mapped)
  1200. return -ENXIO;
  1201. if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
  1202. return ret;
  1203. ret = 0;
  1204. /*
  1205.  * Alan's cs46xx works without a red zone - marvel of ingenuity.
  1206.  * We are not so brilliant... Red zone does two things:
  1207.  *  1. allows for safe start after a pause as we have no way
  1208.  *     to know what the actual, relentlessly advancing, hwptr is.
  1209.  *  2. makes computations in ymf_pcm_interrupt simpler.
  1210.  */
  1211. redzone = ymf_calc_lend(state->format.rate) << state->format.shift;
  1212. redzone *= 3; /* 2 redzone + 1 possible uncertainty reserve. */
  1213. add_wait_queue(&dmabuf->wait, &waita);
  1214. set_current_state(TASK_INTERRUPTIBLE);
  1215. while (count > 0) {
  1216. spin_lock_irqsave(&unit->reg_lock, flags);
  1217. if (unit->suspended) {
  1218. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1219. schedule();
  1220. set_current_state(TASK_INTERRUPTIBLE);
  1221. if (signal_pending(current)) {
  1222. if (!ret) ret = -EAGAIN;
  1223. break;
  1224. }
  1225. continue;
  1226. }
  1227. if (dmabuf->count < 0) {
  1228. printk(KERN_ERR
  1229.    "ymf_write: count %d, was legal in cs46xxn",
  1230.     dmabuf->count);
  1231. dmabuf->count = 0;
  1232. }
  1233. if (dmabuf->count == 0) {
  1234. swptr = dmabuf->hwptr;
  1235. if (state->wpcm.running) {
  1236. /*
  1237.  * Add uncertainty reserve.
  1238.  */
  1239. cnt = ymf_calc_lend(state->format.rate);
  1240. cnt <<= state->format.shift;
  1241. if ((swptr += cnt) >= dmabuf->dmasize) {
  1242. swptr -= dmabuf->dmasize;
  1243. }
  1244. }
  1245. dmabuf->swptr = swptr;
  1246. } else {
  1247. /*
  1248.  * XXX This is not right if dmabuf->count is small -
  1249.  * about 2*x frame size or less. We cannot count on
  1250.  * on appending and not causing an artefact.
  1251.  * Should use a variation of the count==0 case above.
  1252.  */
  1253. swptr = dmabuf->swptr;
  1254. }
  1255. cnt = dmabuf->dmasize - swptr;
  1256. if (dmabuf->count + cnt > dmabuf->dmasize - redzone)
  1257. cnt = (dmabuf->dmasize - redzone) - dmabuf->count;
  1258. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1259. if (cnt > count)
  1260. cnt = count;
  1261. if (cnt <= 0) {
  1262. YMFDBGW("ymf_write: full, count %d swptr %dn",
  1263.    dmabuf->count, dmabuf->swptr);
  1264. /*
  1265.  * buffer is full, start the dma machine and
  1266.  * wait for data to be played
  1267.  */
  1268. spin_lock_irqsave(&unit->reg_lock, flags);
  1269. if (!state->wpcm.running) {
  1270. ymf_playback_trigger(unit, &state->wpcm, 1);
  1271. }
  1272. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1273. if (file->f_flags & O_NONBLOCK) {
  1274. if (!ret) ret = -EAGAIN;
  1275. break;
  1276. }
  1277. schedule();
  1278. set_current_state(TASK_INTERRUPTIBLE);
  1279. if (signal_pending(current)) {
  1280. if (!ret) ret = -ERESTARTSYS;
  1281. break;
  1282. }
  1283. continue;
  1284. }
  1285. if (copy_from_user(dmabuf->rawbuf + swptr, buffer, cnt)) {
  1286. if (!ret) ret = -EFAULT;
  1287. break;
  1288. }
  1289. if ((swptr += cnt) >= dmabuf->dmasize) {
  1290. swptr -= dmabuf->dmasize;
  1291. }
  1292. spin_lock_irqsave(&unit->reg_lock, flags);
  1293. if (unit->suspended) {
  1294. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1295. continue;
  1296. }
  1297. dmabuf->swptr = swptr;
  1298. dmabuf->count += cnt;
  1299. /*
  1300.  * Start here is a bad idea - may cause startup click
  1301.  * in /bin/play when dmabuf is not full yet.
  1302.  * However, some broken applications do not make
  1303.  * any use of SNDCTL_DSP_SYNC (Doom is the worst).
  1304.  * One frame is about 5.3ms, Doom write size is 46ms.
  1305.  */
  1306. delay = state->format.rate / 20; /* 50ms */
  1307. delay <<= state->format.shift;
  1308. if (dmabuf->count >= delay && !state->wpcm.running) {
  1309. ymf_playback_trigger(unit, &state->wpcm, 1);
  1310. }
  1311. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1312. count -= cnt;
  1313. buffer += cnt;
  1314. ret += cnt;
  1315. }
  1316. set_current_state(TASK_RUNNING);
  1317. remove_wait_queue(&dmabuf->wait, &waita);
  1318. YMFDBGW("ymf_write: ret %d dmabuf.count %dn", ret, dmabuf->count);
  1319. return ret;
  1320. }
  1321. static unsigned int ymf_poll(struct file *file, struct poll_table_struct *wait)
  1322. {
  1323. struct ymf_state *state = (struct ymf_state *)file->private_data;
  1324. struct ymf_dmabuf *dmabuf;
  1325. int redzone;
  1326. unsigned long flags;
  1327. unsigned int mask = 0;
  1328. if (file->f_mode & FMODE_WRITE)
  1329. poll_wait(file, &state->wpcm.dmabuf.wait, wait);
  1330. if (file->f_mode & FMODE_READ)
  1331. poll_wait(file, &state->rpcm.dmabuf.wait, wait);
  1332. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1333. if (file->f_mode & FMODE_READ) {
  1334. dmabuf = &state->rpcm.dmabuf;
  1335. if (dmabuf->count >= (signed)dmabuf->fragsize)
  1336. mask |= POLLIN | POLLRDNORM;
  1337. }
  1338. if (file->f_mode & FMODE_WRITE) {
  1339. redzone = ymf_calc_lend(state->format.rate);
  1340. redzone <<= state->format.shift;
  1341. redzone *= 3;
  1342. dmabuf = &state->wpcm.dmabuf;
  1343. if (dmabuf->mapped) {
  1344. if (dmabuf->count >= (signed)dmabuf->fragsize)
  1345. mask |= POLLOUT | POLLWRNORM;
  1346. } else {
  1347. /*
  1348.  * Don't select unless a full fragment is available.
  1349.  * Otherwise artsd does GETOSPACE, sees 0, and loops.
  1350.  */
  1351. if (dmabuf->count + redzone + dmabuf->fragsize
  1352.      <= dmabuf->dmasize)
  1353. mask |= POLLOUT | POLLWRNORM;
  1354. }
  1355. }
  1356. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1357. return mask;
  1358. }
  1359. static int ymf_mmap(struct file *file, struct vm_area_struct *vma)
  1360. {
  1361. struct ymf_state *state = (struct ymf_state *)file->private_data;
  1362. struct ymf_dmabuf *dmabuf = &state->wpcm.dmabuf;
  1363. int ret;
  1364. unsigned long size;
  1365. if (vma->vm_flags & VM_WRITE) {
  1366. if ((ret = prog_dmabuf(state, 0)) != 0)
  1367. return ret;
  1368. } else if (vma->vm_flags & VM_READ) {
  1369. if ((ret = prog_dmabuf(state, 1)) != 0)
  1370. return ret;
  1371. } else 
  1372. return -EINVAL;
  1373. if (vma->vm_pgoff != 0)
  1374. return -EINVAL;
  1375. size = vma->vm_end - vma->vm_start;
  1376. if (size > (PAGE_SIZE << dmabuf->buforder))
  1377. return -EINVAL;
  1378. if (remap_page_range(vma->vm_start, virt_to_phys(dmabuf->rawbuf),
  1379.      size, vma->vm_page_prot))
  1380. return -EAGAIN;
  1381. dmabuf->mapped = 1;
  1382. /* P3 */ printk(KERN_INFO "ymfpci: using memory mapped sound, untested!n");
  1383. return 0;
  1384. }
  1385. static int ymf_ioctl(struct inode *inode, struct file *file,
  1386.     unsigned int cmd, unsigned long arg)
  1387. {
  1388. struct ymf_state *state = (struct ymf_state *)file->private_data;
  1389. struct ymf_dmabuf *dmabuf;
  1390. unsigned long flags;
  1391. audio_buf_info abinfo;
  1392. count_info cinfo;
  1393. int redzone;
  1394. int val;
  1395. switch (cmd) {
  1396. case OSS_GETVERSION:
  1397. YMFDBGX("ymf_ioctl: cmd 0x%x(GETVER) arg 0x%lxn", cmd, arg);
  1398. return put_user(SOUND_VERSION, (int *)arg);
  1399. case SNDCTL_DSP_RESET:
  1400. YMFDBGX("ymf_ioctl: cmd 0x%x(RESET)n", cmd);
  1401. if (file->f_mode & FMODE_WRITE) {
  1402. ymf_wait_dac(state);
  1403. dmabuf = &state->wpcm.dmabuf;
  1404. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1405. dmabuf->ready = 0;
  1406. dmabuf->swptr = dmabuf->hwptr;
  1407. dmabuf->count = dmabuf->total_bytes = 0;
  1408. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1409. }
  1410. if (file->f_mode & FMODE_READ) {
  1411. ymf_stop_adc(state);
  1412. dmabuf = &state->rpcm.dmabuf;
  1413. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1414. dmabuf->ready = 0;
  1415. dmabuf->swptr = dmabuf->hwptr;
  1416. dmabuf->count = dmabuf->total_bytes = 0;
  1417. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1418. }
  1419. return 0;
  1420. case SNDCTL_DSP_SYNC:
  1421. YMFDBGX("ymf_ioctl: cmd 0x%x(SYNC)n", cmd);
  1422. if (file->f_mode & FMODE_WRITE) {
  1423. dmabuf = &state->wpcm.dmabuf;
  1424. if (file->f_flags & O_NONBLOCK) {
  1425. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1426. if (dmabuf->count != 0 && !state->wpcm.running) {
  1427. ymf_start_dac(state);
  1428. }
  1429. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1430. } else {
  1431. ymf_wait_dac(state);
  1432. }
  1433. }
  1434. /* XXX What does this do for reading? dmabuf->count=0; ? */
  1435. return 0;
  1436. case SNDCTL_DSP_SPEED: /* set smaple rate */
  1437. if (get_user(val, (int *)arg))
  1438. return -EFAULT;
  1439. YMFDBGX("ymf_ioctl: cmd 0x%x(SPEED) sp %dn", cmd, val);
  1440. if (val >= 8000 && val <= 48000) {
  1441. if (file->f_mode & FMODE_WRITE) {
  1442. ymf_wait_dac(state);
  1443. dmabuf = &state->wpcm.dmabuf;
  1444. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1445. dmabuf->ready = 0;
  1446. state->format.rate = val;
  1447. ymf_pcm_update_shift(&state->format);
  1448. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1449. }
  1450. if (file->f_mode & FMODE_READ) {
  1451. ymf_stop_adc(state);
  1452. dmabuf = &state->rpcm.dmabuf;
  1453. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1454. dmabuf->ready = 0;
  1455. state->format.rate = val;
  1456. ymf_pcm_update_shift(&state->format);
  1457. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1458. }
  1459. }
  1460. return put_user(state->format.rate, (int *)arg);
  1461. /*
  1462.  * OSS manual does not mention SNDCTL_DSP_STEREO at all.
  1463.  * All channels are mono and if you want stereo, you
  1464.  * play into two channels with SNDCTL_DSP_CHANNELS.
  1465.  * However, mpg123 calls it. I wonder, why Michael Hipp used it.
  1466.  */
  1467. case SNDCTL_DSP_STEREO: /* set stereo or mono channel */
  1468. if (get_user(val, (int *)arg))
  1469. return -EFAULT;
  1470. YMFDBGX("ymf_ioctl: cmd 0x%x(STEREO) st %dn", cmd, val);
  1471. if (file->f_mode & FMODE_WRITE) {
  1472. ymf_wait_dac(state); 
  1473. dmabuf = &state->wpcm.dmabuf;
  1474. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1475. dmabuf->ready = 0;
  1476. state->format.voices = val ? 2 : 1;
  1477. ymf_pcm_update_shift(&state->format);
  1478. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1479. }
  1480. if (file->f_mode & FMODE_READ) {
  1481. ymf_stop_adc(state);
  1482. dmabuf = &state->rpcm.dmabuf;
  1483. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1484. dmabuf->ready = 0;
  1485. state->format.voices = val ? 2 : 1;
  1486. ymf_pcm_update_shift(&state->format);
  1487. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1488. }
  1489. return 0;
  1490. case SNDCTL_DSP_GETBLKSIZE:
  1491. YMFDBGX("ymf_ioctl: cmd 0x%x(GETBLK)n", cmd);
  1492. if (file->f_mode & FMODE_WRITE) {
  1493. if ((val = prog_dmabuf(state, 0)))
  1494. return val;
  1495. val = state->wpcm.dmabuf.fragsize;
  1496. YMFDBGX("ymf_ioctl: GETBLK w %dn", val);
  1497. return put_user(val, (int *)arg);
  1498. }
  1499. if (file->f_mode & FMODE_READ) {
  1500. if ((val = prog_dmabuf(state, 1)))
  1501. return val;
  1502. val = state->rpcm.dmabuf.fragsize;
  1503. YMFDBGX("ymf_ioctl: GETBLK r %dn", val);
  1504. return put_user(val, (int *)arg);
  1505. }
  1506. return -EINVAL;
  1507. case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format*/
  1508. YMFDBGX("ymf_ioctl: cmd 0x%x(GETFMTS)n", cmd);
  1509. return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
  1510. case SNDCTL_DSP_SETFMT: /* Select sample format */
  1511. if (get_user(val, (int *)arg))
  1512. return -EFAULT;
  1513. YMFDBGX("ymf_ioctl: cmd 0x%x(SETFMT) fmt %dn", cmd, val);
  1514. if (val == AFMT_S16_LE || val == AFMT_U8) {
  1515. if (file->f_mode & FMODE_WRITE) {
  1516. ymf_wait_dac(state);
  1517. dmabuf = &state->wpcm.dmabuf;
  1518. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1519. dmabuf->ready = 0;
  1520. state->format.format = val;
  1521. ymf_pcm_update_shift(&state->format);
  1522. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1523. }
  1524. if (file->f_mode & FMODE_READ) {
  1525. ymf_stop_adc(state);
  1526. dmabuf = &state->rpcm.dmabuf;
  1527. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1528. dmabuf->ready = 0;
  1529. state->format.format = val;
  1530. ymf_pcm_update_shift(&state->format);
  1531. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1532. }
  1533. }
  1534. return put_user(state->format.format, (int *)arg);
  1535. case SNDCTL_DSP_CHANNELS:
  1536. if (get_user(val, (int *)arg))
  1537. return -EFAULT;
  1538. YMFDBGX("ymf_ioctl: cmd 0x%x(CHAN) ch %dn", cmd, val);
  1539. if (val != 0) {
  1540. if (file->f_mode & FMODE_WRITE) {
  1541. ymf_wait_dac(state);
  1542. if (val == 1 || val == 2) {
  1543. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1544. dmabuf = &state->wpcm.dmabuf;
  1545. dmabuf->ready = 0;
  1546. state->format.voices = val;
  1547. ymf_pcm_update_shift(&state->format);
  1548. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1549. }
  1550. }
  1551. if (file->f_mode & FMODE_READ) {
  1552. ymf_stop_adc(state);
  1553. if (val == 1 || val == 2) {
  1554. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1555. dmabuf = &state->rpcm.dmabuf;
  1556. dmabuf->ready = 0;
  1557. state->format.voices = val;
  1558. ymf_pcm_update_shift(&state->format);
  1559. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1560. }
  1561. }
  1562. }
  1563. return put_user(state->format.voices, (int *)arg);
  1564. case SNDCTL_DSP_POST:
  1565. YMFDBGX("ymf_ioctl: cmd 0x%x(POST)n", cmd);
  1566. /*
  1567.  * Quoting OSS PG:
  1568.  *    The ioctl SNDCTL_DSP_POST is a lightweight version of
  1569.  *    SNDCTL_DSP_SYNC. It just tells to the driver that there
  1570.  *    is likely to be a pause in the output. This makes it
  1571.  *    possible for the device to handle the pause more
  1572.  *    intelligently. This ioctl doesn't block the application.
  1573.  *
  1574.  * The paragraph above is a clumsy way to say "flush ioctl".
  1575.  * This ioctl is used by mpg123.
  1576.  */
  1577. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1578. if (state->wpcm.dmabuf.count != 0 && !state->wpcm.running) {
  1579. ymf_start_dac(state);
  1580. }
  1581. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1582. return 0;
  1583. case SNDCTL_DSP_SETFRAGMENT:
  1584. if (get_user(val, (int *)arg))
  1585. return -EFAULT;
  1586. YMFDBGX("ymf_ioctl: cmd 0x%x(SETFRAG) fr 0x%04x:%04x(%d:%d)n",
  1587.     cmd,
  1588.     (val >> 16) & 0xFFFF, val & 0xFFFF,
  1589.     (val >> 16) & 0xFFFF, val & 0xFFFF);
  1590. dmabuf = &state->wpcm.dmabuf;
  1591. dmabuf->ossfragshift = val & 0xffff;
  1592. dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
  1593. if (dmabuf->ossfragshift < 4)
  1594. dmabuf->ossfragshift = 4;
  1595. if (dmabuf->ossfragshift > 15)
  1596. dmabuf->ossfragshift = 15;
  1597. return 0;
  1598. case SNDCTL_DSP_GETOSPACE:
  1599. YMFDBGX("ymf_ioctl: cmd 0x%x(GETOSPACE)n", cmd);
  1600. if (!(file->f_mode & FMODE_WRITE))
  1601. return -EINVAL;
  1602. dmabuf = &state->wpcm.dmabuf;
  1603. if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
  1604. return val;
  1605. redzone = ymf_calc_lend(state->format.rate);
  1606. redzone <<= state->format.shift;
  1607. redzone *= 3;
  1608. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1609. abinfo.fragsize = dmabuf->fragsize;
  1610. abinfo.bytes = dmabuf->dmasize - dmabuf->count - redzone;
  1611. abinfo.fragstotal = dmabuf->numfrag;
  1612. abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;
  1613. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1614. return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
  1615. case SNDCTL_DSP_GETISPACE:
  1616. YMFDBGX("ymf_ioctl: cmd 0x%x(GETISPACE)n", cmd);
  1617. if (!(file->f_mode & FMODE_READ))
  1618. return -EINVAL;
  1619. dmabuf = &state->rpcm.dmabuf;
  1620. if (!dmabuf->ready && (val = prog_dmabuf(state, 1)) != 0)
  1621. return val;
  1622. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1623. abinfo.fragsize = dmabuf->fragsize;
  1624. abinfo.bytes = dmabuf->count;
  1625. abinfo.fragstotal = dmabuf->numfrag;
  1626. abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;
  1627. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1628. return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
  1629. case SNDCTL_DSP_NONBLOCK:
  1630. YMFDBGX("ymf_ioctl: cmd 0x%x(NONBLOCK)n", cmd);
  1631. file->f_flags |= O_NONBLOCK;
  1632. return 0;
  1633. case SNDCTL_DSP_GETCAPS:
  1634. YMFDBGX("ymf_ioctl: cmd 0x%x(GETCAPS)n", cmd);
  1635. /* return put_user(DSP_CAP_REALTIME|DSP_CAP_TRIGGER|DSP_CAP_MMAP,
  1636.     (int *)arg); */
  1637. return put_user(0, (int *)arg);
  1638. case SNDCTL_DSP_GETIPTR:
  1639. YMFDBGX("ymf_ioctl: cmd 0x%x(GETIPTR)n", cmd);
  1640. if (!(file->f_mode & FMODE_READ))
  1641. return -EINVAL;
  1642. dmabuf = &state->rpcm.dmabuf;
  1643. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1644. cinfo.bytes = dmabuf->total_bytes;
  1645. cinfo.blocks = dmabuf->count >> dmabuf->fragshift;
  1646. cinfo.ptr = dmabuf->hwptr;
  1647. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1648. YMFDBGX("ymf_ioctl: GETIPTR ptr %d bytes %dn",
  1649.     cinfo.ptr, cinfo.bytes);
  1650. return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
  1651. case SNDCTL_DSP_GETOPTR:
  1652. YMFDBGX("ymf_ioctl: cmd 0x%x(GETOPTR)n", cmd);
  1653. if (!(file->f_mode & FMODE_WRITE))
  1654. return -EINVAL;
  1655. dmabuf = &state->wpcm.dmabuf;
  1656. spin_lock_irqsave(&state->unit->reg_lock, flags);
  1657. cinfo.bytes = dmabuf->total_bytes;
  1658. cinfo.blocks = dmabuf->count >> dmabuf->fragshift;
  1659. cinfo.ptr = dmabuf->hwptr;
  1660. spin_unlock_irqrestore(&state->unit->reg_lock, flags);
  1661. YMFDBGX("ymf_ioctl: GETOPTR ptr %d bytes %dn",
  1662.     cinfo.ptr, cinfo.bytes);
  1663. return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
  1664. case SNDCTL_DSP_SETDUPLEX:
  1665. YMFDBGX("ymf_ioctl: cmd 0x%x(SETDUPLEX)n", cmd);
  1666. return 0; /* Always duplex */
  1667. case SOUND_PCM_READ_RATE:
  1668. YMFDBGX("ymf_ioctl: cmd 0x%x(READ_RATE)n", cmd);
  1669. return put_user(state->format.rate, (int *)arg);
  1670. case SOUND_PCM_READ_CHANNELS:
  1671. YMFDBGX("ymf_ioctl: cmd 0x%x(READ_CH)n", cmd);
  1672. return put_user(state->format.voices, (int *)arg);
  1673. case SOUND_PCM_READ_BITS:
  1674. YMFDBGX("ymf_ioctl: cmd 0x%x(READ_BITS)n", cmd);
  1675. return put_user(AFMT_S16_LE, (int *)arg);
  1676. case SNDCTL_DSP_MAPINBUF:
  1677. case SNDCTL_DSP_MAPOUTBUF:
  1678. case SNDCTL_DSP_SETSYNCRO:
  1679. case SOUND_PCM_WRITE_FILTER:
  1680. case SOUND_PCM_READ_FILTER:
  1681. YMFDBGX("ymf_ioctl: cmd 0x%x unsupportedn", cmd);
  1682. return -ENOTTY;
  1683. default:
  1684. /*
  1685.  * Some programs mix up audio devices and ioctls
  1686.  * or perhaps they expect "universal" ioctls,
  1687.  * for instance we get SNDCTL_TMR_CONTINUE here.
  1688.  * (mpg123 -g 100 ends here too - to be fixed.)
  1689.  */
  1690. YMFDBGX("ymf_ioctl: cmd 0x%x unknownn", cmd);
  1691. break;
  1692. }
  1693. return -ENOTTY;
  1694. }
  1695. /*
  1696.  * open(2)
  1697.  * We use upper part of the minor to distinguish between soundcards.
  1698.  * Channels are opened with a clone open.
  1699.  */
  1700. static int ymf_open(struct inode *inode, struct file *file)
  1701. {
  1702. struct list_head *list;
  1703. ymfpci_t *unit = NULL;
  1704. int minor;
  1705. struct ymf_state *state;
  1706. int err;
  1707. minor = MINOR(inode->i_rdev);
  1708. if ((minor & 0x0F) == 3) { /* /dev/dspN */
  1709. ;
  1710. } else {
  1711. return -ENXIO;
  1712. }
  1713. unit = NULL; /* gcc warns */
  1714. list_for_each(list, &ymf_devs) {
  1715. unit = list_entry(list, ymfpci_t, ymf_devs);
  1716. if (((unit->dev_audio ^ minor) & ~0x0F) == 0)
  1717. break;
  1718. }
  1719. if (list == &ymf_devs)
  1720. return -ENODEV;
  1721. down(&unit->open_sem);
  1722. if ((state = ymf_state_alloc(unit)) == NULL) {
  1723. up(&unit->open_sem);
  1724. return -ENOMEM;
  1725. }
  1726. list_add_tail(&state->chain, &unit->states);
  1727. file->private_data = state;
  1728. /*
  1729.  * ymf_read and ymf_write that we borrowed from cs46xx
  1730.  * allocate buffers with prog_dmabuf(). We call prog_dmabuf
  1731.  * here so that in case of DMA memory exhaustion open
  1732.  * fails rather than write.
  1733.  *
  1734.  * XXX prog_dmabuf allocates voice. Should allocate explicitly, above.
  1735.  */
  1736. if (file->f_mode & FMODE_WRITE) {
  1737. if (!state->wpcm.dmabuf.ready) {
  1738. if ((err = prog_dmabuf(state, 0)) != 0) {
  1739. goto out_nodma;
  1740. }
  1741. }
  1742. }
  1743. if (file->f_mode & FMODE_READ) {
  1744. if (!state->rpcm.dmabuf.ready) {
  1745. if ((err = prog_dmabuf(state, 1)) != 0) {
  1746. goto out_nodma;
  1747. }
  1748. }
  1749. }
  1750. #if 0 /* test if interrupts work */
  1751. ymfpci_writew(unit, YDSXGR_TIMERCOUNT, 0xfffe); /* ~ 680ms */
  1752. ymfpci_writeb(unit, YDSXGR_TIMERCTRL,
  1753.     (YDSXGR_TIMERCTRL_TEN|YDSXGR_TIMERCTRL_TIEN));
  1754. #endif
  1755. up(&unit->open_sem);
  1756. return 0;
  1757. out_nodma:
  1758. /*
  1759.  * XXX Broken custom: "goto out_xxx" in other place is
  1760.  * a nestable exception, but here it is not nestable due to semaphore.
  1761.  * XXX Doubtful technique of self-describing objects....
  1762.  */
  1763. dealloc_dmabuf(unit, &state->wpcm.dmabuf);
  1764. dealloc_dmabuf(unit, &state->rpcm.dmabuf);
  1765. ymf_pcm_free_substream(&state->wpcm);
  1766. ymf_pcm_free_substream(&state->rpcm);
  1767. list_del(&state->chain);
  1768. kfree(state);
  1769. up(&unit->open_sem);
  1770. return err;
  1771. }
  1772. static int ymf_release(struct inode *inode, struct file *file)
  1773. {
  1774. struct ymf_state *state = (struct ymf_state *)file->private_data;
  1775. ymfpci_t *unit = state->unit;
  1776. #if 0 /* test if interrupts work */
  1777. ymfpci_writeb(unit, YDSXGR_TIMERCTRL, 0);
  1778. #endif
  1779. down(&unit->open_sem);
  1780. /*
  1781.  * XXX Solve the case of O_NONBLOCK close - don't deallocate here.
  1782.  * Deallocate when unloading the driver and we can wait.
  1783.  */
  1784. ymf_wait_dac(state);
  1785. ymf_stop_adc(state); /* fortunately, it's immediate */
  1786. dealloc_dmabuf(unit, &state->wpcm.dmabuf);
  1787. dealloc_dmabuf(unit, &state->rpcm.dmabuf);
  1788. ymf_pcm_free_substream(&state->wpcm);
  1789. ymf_pcm_free_substream(&state->rpcm);
  1790. list_del(&state->chain);
  1791. file->private_data = NULL; /* Can you tell I programmed Solaris */
  1792. kfree(state);
  1793. up(&unit->open_sem);
  1794. return 0;
  1795. }
  1796. /*
  1797.  * Mixer operations are based on cs46xx.
  1798.  */
  1799. static int ymf_open_mixdev(struct inode *inode, struct file *file)
  1800. {
  1801. int minor = MINOR(inode->i_rdev);
  1802. struct list_head *list;
  1803. ymfpci_t *unit;
  1804. int i;
  1805. list_for_each(list, &ymf_devs) {
  1806. unit = list_entry(list, ymfpci_t, ymf_devs);
  1807. for (i = 0; i < NR_AC97; i++) {
  1808. if (unit->ac97_codec[i] != NULL &&
  1809.     unit->ac97_codec[i]->dev_mixer == minor) {
  1810. goto match;
  1811. }
  1812. }
  1813. }
  1814. return -ENODEV;
  1815.  match:
  1816. file->private_data = unit->ac97_codec[i];
  1817. return 0;
  1818. }
  1819. static int ymf_ioctl_mixdev(struct inode *inode, struct file *file,
  1820.     unsigned int cmd, unsigned long arg)
  1821. {
  1822. struct ac97_codec *codec = (struct ac97_codec *)file->private_data;
  1823. return codec->mixer_ioctl(codec, cmd, arg);
  1824. }
  1825. static int ymf_release_mixdev(struct inode *inode, struct file *file)
  1826. {
  1827. return 0;
  1828. }
  1829. static /*const*/ struct file_operations ymf_fops = {
  1830. owner: THIS_MODULE,
  1831. llseek: no_llseek,
  1832. read: ymf_read,
  1833. write: ymf_write,
  1834. poll: ymf_poll,
  1835. ioctl: ymf_ioctl,
  1836. mmap: ymf_mmap,
  1837. open: ymf_open,
  1838. release: ymf_release,
  1839. };
  1840. static /*const*/ struct file_operations ymf_mixer_fops = {
  1841. owner: THIS_MODULE,
  1842. llseek: no_llseek,
  1843. ioctl: ymf_ioctl_mixdev,
  1844. open: ymf_open_mixdev,
  1845. release: ymf_release_mixdev,
  1846. };
  1847. /*
  1848.  */
  1849. static int ymf_suspend(struct pci_dev *pcidev, u32 unused)
  1850. {
  1851. struct ymf_unit *unit = pci_get_drvdata(pcidev);
  1852. unsigned long flags;
  1853. struct ymf_dmabuf *dmabuf;
  1854. struct list_head *p;
  1855. struct ymf_state *state;
  1856. struct ac97_codec *codec;
  1857. int i;
  1858. spin_lock_irqsave(&unit->reg_lock, flags);
  1859. unit->suspended = 1;
  1860. for (i = 0; i < NR_AC97; i++) {
  1861. if ((codec = unit->ac97_codec[i]) != NULL)
  1862. ac97_save_state(codec);
  1863. }
  1864. list_for_each(p, &unit->states) {
  1865. state = list_entry(p, struct ymf_state, chain);
  1866. dmabuf = &state->wpcm.dmabuf;
  1867. dmabuf->hwptr = dmabuf->swptr = 0;
  1868. dmabuf->total_bytes = 0;
  1869. dmabuf->count = 0;
  1870. dmabuf = &state->rpcm.dmabuf;
  1871. dmabuf->hwptr = dmabuf->swptr = 0;
  1872. dmabuf->total_bytes = 0;
  1873. dmabuf->count = 0;
  1874. }
  1875. ymfpci_writel(unit, YDSXGR_NATIVEDACOUTVOL, 0);
  1876. ymfpci_disable_dsp(unit);
  1877. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1878. return 0;
  1879. }
  1880. static int ymf_resume(struct pci_dev *pcidev)
  1881. {
  1882. struct ymf_unit *unit = pci_get_drvdata(pcidev);
  1883. unsigned long flags;
  1884. struct list_head *p;
  1885. struct ymf_state *state;
  1886. struct ac97_codec *codec;
  1887. int i;
  1888. ymfpci_aclink_reset(unit->pci);
  1889. ymfpci_codec_ready(unit, 0, 1); /* prints diag if not ready. */
  1890. #ifdef CONFIG_SOUND_YMFPCI_LEGACY
  1891. /* XXX At this time the legacy registers are probably deprogrammed. */
  1892. #endif
  1893. ymfpci_download_image(unit);
  1894. ymf_memload(unit);
  1895. spin_lock_irqsave(&unit->reg_lock, flags);
  1896. if (unit->start_count) {
  1897. ymfpci_writel(unit, YDSXGR_MODE, 3);
  1898. unit->active_bank = ymfpci_readl(unit, YDSXGR_CTRLSELECT) & 1;
  1899. }
  1900. for (i = 0; i < NR_AC97; i++) {
  1901. if ((codec = unit->ac97_codec[i]) != NULL)
  1902. ac97_restore_state(codec);
  1903. }
  1904. unit->suspended = 0;
  1905. list_for_each(p, &unit->states) {
  1906. state = list_entry(p, struct ymf_state, chain);
  1907. wake_up(&state->wpcm.dmabuf.wait);
  1908. wake_up(&state->rpcm.dmabuf.wait);
  1909. }
  1910. spin_unlock_irqrestore(&unit->reg_lock, flags);
  1911. return 0;
  1912. }
  1913. /*
  1914.  *  initialization routines
  1915.  */
  1916. #ifdef CONFIG_SOUND_YMFPCI_LEGACY
  1917. static int ymfpci_setup_legacy(ymfpci_t *unit, struct pci_dev *pcidev)
  1918. {
  1919. int v;
  1920. int mpuio = -1, oplio = -1;
  1921. switch (unit->iomidi) {
  1922. case 0x330:
  1923. mpuio = 0;
  1924. break;
  1925. case 0x300:
  1926. mpuio = 1;
  1927. break;
  1928. case 0x332:
  1929. mpuio = 2;
  1930. break;
  1931. case 0x334:
  1932. mpuio = 3;
  1933. break;
  1934. default: ;
  1935. }
  1936. switch (unit->iosynth) {
  1937. case 0x388:
  1938. oplio = 0;
  1939. break;
  1940. case 0x398:
  1941. oplio = 1;
  1942. break;
  1943. case 0x3a0:
  1944. oplio = 2;
  1945. break;
  1946. case 0x3a8:
  1947. oplio = 3;
  1948. break;
  1949. default: ;
  1950. }
  1951. if (mpuio >= 0 || oplio >= 0) {
  1952. /* 0x0020: 1 - 10 bits of I/O address decoded, 0 - 16 bits. */
  1953. v = 0x001e;
  1954. pci_write_config_word(pcidev, PCIR_LEGCTRL, v);
  1955. switch (pcidev->device) {
  1956. case PCI_DEVICE_ID_YAMAHA_724:
  1957. case PCI_DEVICE_ID_YAMAHA_740:
  1958. case PCI_DEVICE_ID_YAMAHA_724F:
  1959. case PCI_DEVICE_ID_YAMAHA_740C:
  1960. v = 0x8800;
  1961. if (mpuio >= 0) { v |= mpuio<<4; }
  1962. if (oplio >= 0) { v |= oplio; }
  1963. pci_write_config_word(pcidev, PCIR_ELEGCTRL, v);
  1964. break;
  1965. case PCI_DEVICE_ID_YAMAHA_744:
  1966. case PCI_DEVICE_ID_YAMAHA_754:
  1967. v = 0x8800;
  1968. pci_write_config_word(pcidev, PCIR_ELEGCTRL, v);
  1969. if (oplio >= 0) {
  1970. pci_write_config_word(pcidev, PCIR_OPLADR, unit->iosynth);
  1971. }
  1972. if (mpuio >= 0) {
  1973. pci_write_config_word(pcidev, PCIR_MPUADR, unit->iomidi);
  1974. }
  1975. break;
  1976. default:
  1977. printk(KERN_ERR "ymfpci: Unknown device ID: 0x%xn",
  1978.     pcidev->device);
  1979. return -EINVAL;
  1980. }
  1981. }
  1982. return 0;
  1983. }
  1984. #endif /* CONFIG_SOUND_YMFPCI_LEGACY */
  1985. static void ymfpci_aclink_reset(struct pci_dev * pci)
  1986. {
  1987. u8 cmd;
  1988. /*
  1989.  * In the 744, 754 only 0x01 exists, 0x02 is undefined.
  1990.  * It does not seem to hurt to trip both regardless of revision.
  1991.  */
  1992. pci_read_config_byte(pci, PCIR_DSXGCTRL, &cmd);
  1993. pci_write_config_byte(pci, PCIR_DSXGCTRL, cmd & 0xfc);
  1994. pci_write_config_byte(pci, PCIR_DSXGCTRL, cmd | 0x03);
  1995. pci_write_config_byte(pci, PCIR_DSXGCTRL, cmd & 0xfc);
  1996. pci_write_config_word(pci, PCIR_DSXPWRCTRL1, 0);
  1997. pci_write_config_word(pci, PCIR_DSXPWRCTRL2, 0);
  1998. }
  1999. static void ymfpci_enable_dsp(ymfpci_t *codec)
  2000. {
  2001. ymfpci_writel(codec, YDSXGR_CONFIG, 0x00000001);
  2002. }
  2003. static void ymfpci_disable_dsp(ymfpci_t *codec)
  2004. {
  2005. u32 val;
  2006. int timeout = 1000;
  2007. val = ymfpci_readl(codec, YDSXGR_CONFIG);
  2008. if (val)
  2009. ymfpci_writel(codec, YDSXGR_CONFIG, 0x00000000);
  2010. while (timeout-- > 0) {
  2011. val = ymfpci_readl(codec, YDSXGR_STATUS);
  2012. if ((val & 0x00000002) == 0)
  2013. break;
  2014. }
  2015. }
  2016. #include "ymfpci_image.h"
  2017. static void ymfpci_download_image(ymfpci_t *codec)
  2018. {
  2019. int i, ver_1e;
  2020. u16 ctrl;
  2021. ymfpci_writel(codec, YDSXGR_NATIVEDACOUTVOL, 0x00000000);
  2022. ymfpci_disable_dsp(codec);
  2023. ymfpci_writel(codec, YDSXGR_MODE, 0x00010000);
  2024. ymfpci_writel(codec, YDSXGR_MODE, 0x00000000);
  2025. ymfpci_writel(codec, YDSXGR_MAPOFREC, 0x00000000);
  2026. ymfpci_writel(codec, YDSXGR_MAPOFEFFECT, 0x00000000);
  2027. ymfpci_writel(codec, YDSXGR_PLAYCTRLBASE, 0x00000000);
  2028. ymfpci_writel(codec, YDSXGR_RECCTRLBASE, 0x00000000);
  2029. ymfpci_writel(codec, YDSXGR_EFFCTRLBASE, 0x00000000);
  2030. ctrl = ymfpci_readw(codec, YDSXGR_GLOBALCTRL);
  2031. ymfpci_writew(codec, YDSXGR_GLOBALCTRL, ctrl & ~0x0007);
  2032. /* setup DSP instruction code */
  2033. for (i = 0; i < YDSXG_DSPLENGTH / 4; i++)
  2034. ymfpci_writel(codec, YDSXGR_DSPINSTRAM + (i << 2), DspInst[i]);
  2035. switch (codec->pci->device) {
  2036. case PCI_DEVICE_ID_YAMAHA_724F:
  2037. case PCI_DEVICE_ID_YAMAHA_740C:
  2038. case PCI_DEVICE_ID_YAMAHA_744:
  2039. case PCI_DEVICE_ID_YAMAHA_754:
  2040. ver_1e = 1;
  2041. break;
  2042. default:
  2043. ver_1e = 0;
  2044. }
  2045. if (ver_1e) {
  2046. /* setup control instruction code */
  2047. for (i = 0; i < YDSXG_CTRLLENGTH / 4; i++)
  2048. ymfpci_writel(codec, YDSXGR_CTRLINSTRAM + (i << 2), CntrlInst1E[i]);
  2049. } else {
  2050. for (i = 0; i < YDSXG_CTRLLENGTH / 4; i++)
  2051. ymfpci_writel(codec, YDSXGR_CTRLINSTRAM + (i << 2), CntrlInst[i]);
  2052. }
  2053. ymfpci_enable_dsp(codec);
  2054. /* 0.02s sounds not too bad, we may do schedule_timeout() later. */
  2055. mdelay(20); /* seems we need some delay after downloading image.. */
  2056. }
  2057. static int ymfpci_memalloc(ymfpci_t *codec)
  2058. {
  2059. unsigned int playback_ctrl_size;
  2060. unsigned int bank_size_playback;
  2061. unsigned int bank_size_capture;
  2062. unsigned int bank_size_effect;
  2063. unsigned int size;
  2064. unsigned int off;
  2065. char *ptr;
  2066. dma_addr_t pba;
  2067. int voice, bank;
  2068. playback_ctrl_size = 4 + 4 * YDSXG_PLAYBACK_VOICES;
  2069. bank_size_playback = ymfpci_readl(codec, YDSXGR_PLAYCTRLSIZE) << 2;
  2070. bank_size_capture = ymfpci_readl(codec, YDSXGR_RECCTRLSIZE) << 2;
  2071. bank_size_effect = ymfpci_readl(codec, YDSXGR_EFFCTRLSIZE) << 2;
  2072. codec->work_size = YDSXG_DEFAULT_WORK_SIZE;
  2073. size = ((playback_ctrl_size + 0x00ff) & ~0x00ff) +
  2074.     ((bank_size_playback * 2 * YDSXG_PLAYBACK_VOICES + 0xff) & ~0xff) +
  2075.     ((bank_size_capture * 2 * YDSXG_CAPTURE_VOICES + 0xff) & ~0xff) +
  2076.     ((bank_size_effect * 2 * YDSXG_EFFECT_VOICES + 0xff) & ~0xff) +
  2077.     codec->work_size;
  2078. ptr = pci_alloc_consistent(codec->pci, size + 0xff, &pba);
  2079. if (ptr == NULL)
  2080. return -ENOMEM;
  2081. codec->dma_area_va = ptr;
  2082. codec->dma_area_ba = pba;
  2083. codec->dma_area_size = size + 0xff;
  2084. if ((off = ((uint) ptr) & 0xff) != 0) {
  2085. ptr += 0x100 - off;
  2086. pba += 0x100 - off;
  2087. }
  2088. /*
  2089.  * Hardware requires only ptr[playback_ctrl_size] zeroed,
  2090.  * but in our judgement it is a wrong kind of savings, so clear it all.
  2091.  */
  2092. memset(ptr, 0, size);
  2093. codec->ctrl_playback = (u32 *)ptr;
  2094. codec->ctrl_playback_ba = pba;
  2095. codec->ctrl_playback[0] = cpu_to_le32(YDSXG_PLAYBACK_VOICES);
  2096. ptr += (playback_ctrl_size + 0x00ff) & ~0x00ff;
  2097. pba += (playback_ctrl_size + 0x00ff) & ~0x00ff;
  2098. off = 0;
  2099. for (voice = 0; voice < YDSXG_PLAYBACK_VOICES; voice++) {
  2100. codec->voices[voice].number = voice;
  2101. codec->voices[voice].bank =
  2102.     (ymfpci_playback_bank_t *) (ptr + off);
  2103. codec->voices[voice].bank_ba = pba + off;
  2104. off += 2 * bank_size_playback; /* 2 banks */
  2105. }
  2106. off = (off + 0xff) & ~0xff;
  2107. ptr += off;
  2108. pba += off;
  2109. off = 0;
  2110. codec->bank_base_capture = pba;
  2111. for (voice = 0; voice < YDSXG_CAPTURE_VOICES; voice++)
  2112. for (bank = 0; bank < 2; bank++) {
  2113. codec->bank_capture[voice][bank] =
  2114.     (ymfpci_capture_bank_t *) (ptr + off);
  2115. off += bank_size_capture;
  2116. }
  2117. off = (off + 0xff) & ~0xff;
  2118. ptr += off;
  2119. pba += off;
  2120. off = 0;
  2121. codec->bank_base_effect = pba;
  2122. for (voice = 0; voice < YDSXG_EFFECT_VOICES; voice++)
  2123. for (bank = 0; bank < 2; bank++) {
  2124. codec->bank_effect[voice][bank] =
  2125.     (ymfpci_effect_bank_t *) (ptr + off);
  2126. off += bank_size_effect;
  2127. }
  2128. off = (off + 0xff) & ~0xff;
  2129. ptr += off;
  2130. pba += off;
  2131. codec->work_base = pba;
  2132. return 0;
  2133. }
  2134. static void ymfpci_memfree(ymfpci_t *codec)
  2135. {
  2136. ymfpci_writel(codec, YDSXGR_PLAYCTRLBASE, 0);
  2137. ymfpci_writel(codec, YDSXGR_RECCTRLBASE, 0);
  2138. ymfpci_writel(codec, YDSXGR_EFFCTRLBASE, 0);
  2139. ymfpci_writel(codec, YDSXGR_WORKBASE, 0);
  2140. ymfpci_writel(codec, YDSXGR_WORKSIZE, 0);
  2141. pci_free_consistent(codec->pci,
  2142.     codec->dma_area_size, codec->dma_area_va, codec->dma_area_ba);
  2143. }
  2144. static void ymf_memload(ymfpci_t *unit)
  2145. {
  2146. ymfpci_writel(unit, YDSXGR_PLAYCTRLBASE, unit->ctrl_playback_ba);
  2147. ymfpci_writel(unit, YDSXGR_RECCTRLBASE, unit->bank_base_capture);
  2148. ymfpci_writel(unit, YDSXGR_EFFCTRLBASE, unit->bank_base_effect);
  2149. ymfpci_writel(unit, YDSXGR_WORKBASE, unit->work_base);
  2150. ymfpci_writel(unit, YDSXGR_WORKSIZE, unit->work_size >> 2);
  2151. /* S/PDIF output initialization */
  2152. ymfpci_writew(unit, YDSXGR_SPDIFOUTCTRL, 0);
  2153. ymfpci_writew(unit, YDSXGR_SPDIFOUTSTATUS,
  2154. SND_PCM_AES0_CON_EMPHASIS_NONE |
  2155. (SND_PCM_AES1_CON_ORIGINAL << 8) |
  2156. (SND_PCM_AES1_CON_PCM_CODER << 8));
  2157. /* S/PDIF input initialization */
  2158. ymfpci_writew(unit, YDSXGR_SPDIFINCTRL, 0);
  2159. /* move this volume setup to mixer */
  2160. ymfpci_writel(unit, YDSXGR_NATIVEDACOUTVOL, 0x3fff3fff);
  2161. ymfpci_writel(unit, YDSXGR_BUF441OUTVOL, 0);
  2162. ymfpci_writel(unit, YDSXGR_NATIVEADCINVOL, 0x3fff3fff);
  2163. ymfpci_writel(unit, YDSXGR_NATIVEDACINVOL, 0x3fff3fff);
  2164. }
  2165. static int ymf_ac97_init(ymfpci_t *unit, int num_ac97)
  2166. {
  2167. struct ac97_codec *codec;
  2168. u16 eid;
  2169. if ((codec = kmalloc(sizeof(struct ac97_codec), GFP_KERNEL)) == NULL)
  2170. return -ENOMEM;
  2171. memset(codec, 0, sizeof(struct ac97_codec));
  2172. /* initialize some basic codec information, other fields will be filled
  2173.    in ac97_probe_codec */
  2174. codec->private_data = unit;
  2175. codec->id = num_ac97;
  2176. codec->codec_read = ymfpci_codec_read;
  2177. codec->codec_write = ymfpci_codec_write;
  2178. if (ac97_probe_codec(codec) == 0) {
  2179. printk(KERN_ERR "ymfpci: ac97_probe_codec failedn");
  2180. goto out_kfree;
  2181. }
  2182. eid = ymfpci_codec_read(codec, AC97_EXTENDED_ID);
  2183. if (eid==0xFFFFFF) {
  2184. printk(KERN_WARNING "ymfpci: no codec attached ?n");
  2185. goto out_kfree;
  2186. }
  2187. unit->ac97_features = eid;
  2188. if ((codec->dev_mixer = register_sound_mixer(&ymf_mixer_fops, -1)) < 0) {
  2189. printk(KERN_ERR "ymfpci: couldn't register mixer!n");
  2190. goto out_kfree;
  2191. }
  2192. unit->ac97_codec[num_ac97] = codec;
  2193. return 0;
  2194.  out_kfree:
  2195. kfree(codec);
  2196. return -ENODEV;
  2197. }
  2198. #ifdef CONFIG_SOUND_YMFPCI_LEGACY
  2199. # ifdef MODULE
  2200. static int mpu_io     = 0;
  2201. static int synth_io   = 0;
  2202. MODULE_PARM(mpu_io, "i");
  2203. MODULE_PARM(synth_io, "i");
  2204. # else
  2205. static int mpu_io     = 0x330;
  2206. static int synth_io   = 0x388;
  2207. # endif
  2208. static int assigned;
  2209. #endif /* CONFIG_SOUND_YMFPCI_LEGACY */
  2210. static int __devinit ymf_probe_one(struct pci_dev *pcidev, const struct pci_device_id *ent)
  2211. {
  2212. u16 ctrl;
  2213. unsigned long base;
  2214. ymfpci_t *codec;
  2215. int err;
  2216. if ((err = pci_enable_device(pcidev)) != 0) {
  2217. printk(KERN_ERR "ymfpci: pci_enable_device failedn");
  2218. return err;
  2219. }
  2220. base = pci_resource_start(pcidev, 0);
  2221. if ((codec = kmalloc(sizeof(ymfpci_t), GFP_KERNEL)) == NULL) {
  2222. printk(KERN_ERR "ymfpci: no coren");
  2223. return -ENOMEM;
  2224. }
  2225. memset(codec, 0, sizeof(*codec));
  2226. spin_lock_init(&codec->reg_lock);
  2227. spin_lock_init(&codec->voice_lock);
  2228. init_MUTEX(&codec->open_sem);
  2229. INIT_LIST_HEAD(&codec->states);
  2230. codec->pci = pcidev;
  2231. pci_read_config_byte(pcidev, PCI_REVISION_ID, &codec->rev);
  2232. if (request_mem_region(base, 0x8000, "ymfpci") == NULL) {
  2233. printk(KERN_ERR "ymfpci: unable to request mem regionn");
  2234. goto out_free;
  2235. }
  2236. if ((codec->reg_area_virt = ioremap(base, 0x8000)) == NULL) {
  2237. printk(KERN_ERR "ymfpci: unable to map registersn");
  2238. goto out_release_region;
  2239. }
  2240. pci_set_master(pcidev);
  2241. printk(KERN_INFO "ymfpci: %s at 0x%lx IRQ %dn",
  2242.     (char *)ent->driver_data, base, pcidev->irq);
  2243. ymfpci_aclink_reset(pcidev);
  2244. if (ymfpci_codec_ready(codec, 0, 1) < 0)
  2245. goto out_unmap;
  2246. #ifdef CONFIG_SOUND_YMFPCI_LEGACY
  2247. if (assigned == 0) {
  2248. codec->iomidi = mpu_io;
  2249. codec->iosynth = synth_io;
  2250. if (ymfpci_setup_legacy(codec, pcidev) < 0)
  2251. goto out_unmap;
  2252. assigned = 1;
  2253. }
  2254. #endif
  2255. ymfpci_download_image(codec);
  2256. if (ymfpci_memalloc(codec) < 0)
  2257. goto out_disable_dsp;
  2258. ymf_memload(codec);
  2259. if (request_irq(pcidev->irq, ymf_interrupt, SA_SHIRQ, "ymfpci", codec) != 0) {
  2260. printk(KERN_ERR "ymfpci: unable to request IRQ %dn",
  2261.     pcidev->irq);
  2262. goto out_memfree;
  2263. }
  2264. /* register /dev/dsp */
  2265. if ((codec->dev_audio = register_sound_dsp(&ymf_fops, -1)) < 0) {
  2266. printk(KERN_ERR "ymfpci: unable to register dspn");
  2267. goto out_free_irq;
  2268. }
  2269. /*
  2270.  * Poke just the primary for the moment.
  2271.  */
  2272. if ((err = ymf_ac97_init(codec, 0)) != 0)
  2273. goto out_unregister_sound_dsp;
  2274. #ifdef CONFIG_SOUND_YMFPCI_LEGACY
  2275. codec->opl3_data.name = "ymfpci";
  2276. codec->mpu_data.name  = "ymfpci";
  2277. codec->opl3_data.io_base = codec->iosynth;
  2278. codec->opl3_data.irq     = -1;
  2279. codec->mpu_data.io_base  = codec->iomidi;
  2280. codec->mpu_data.irq      = -1; /* May be different from our PCI IRQ. */
  2281. if (codec->iomidi) {
  2282. if (!probe_uart401(&codec->mpu_data, THIS_MODULE)) {
  2283. codec->iomidi = 0; /* XXX kludge */
  2284. }
  2285. }
  2286. #endif /* CONFIG_SOUND_YMFPCI_LEGACY */
  2287. /* put it into driver list */
  2288. list_add_tail(&codec->ymf_devs, &ymf_devs);
  2289. pci_set_drvdata(pcidev, codec);
  2290. return 0;
  2291.  out_unregister_sound_dsp:
  2292. unregister_sound_dsp(codec->dev_audio);
  2293.  out_free_irq:
  2294. free_irq(pcidev->irq, codec);
  2295.  out_memfree:
  2296. ymfpci_memfree(codec);
  2297.  out_disable_dsp:
  2298. ymfpci_disable_dsp(codec);
  2299. ctrl = ymfpci_readw(codec, YDSXGR_GLOBALCTRL);
  2300. ymfpci_writew(codec, YDSXGR_GLOBALCTRL, ctrl & ~0x0007);
  2301. ymfpci_writel(codec, YDSXGR_STATUS, ~0);
  2302.  out_unmap:
  2303. iounmap(codec->reg_area_virt);
  2304.  out_release_region:
  2305. release_mem_region(pci_resource_start(pcidev, 0), 0x8000);
  2306.  out_free:
  2307. kfree(codec);
  2308. return -ENODEV;
  2309. }
  2310. static void __devexit ymf_remove_one(struct pci_dev *pcidev)
  2311. {
  2312. __u16 ctrl;
  2313. ymfpci_t *codec = pci_get_drvdata(pcidev);
  2314. /* remove from list of devices */
  2315. list_del(&codec->ymf_devs);
  2316. unregister_sound_mixer(codec->ac97_codec[0]->dev_mixer);
  2317. kfree(codec->ac97_codec[0]);
  2318. unregister_sound_dsp(codec->dev_audio);
  2319. free_irq(pcidev->irq, codec);
  2320. ymfpci_memfree(codec);
  2321. ymfpci_writel(codec, YDSXGR_STATUS, ~0);
  2322. ymfpci_disable_dsp(codec);
  2323. ctrl = ymfpci_readw(codec, YDSXGR_GLOBALCTRL);
  2324. ymfpci_writew(codec, YDSXGR_GLOBALCTRL, ctrl & ~0x0007);
  2325. iounmap(codec->reg_area_virt);
  2326. release_mem_region(pci_resource_start(pcidev, 0), 0x8000);
  2327. #ifdef CONFIG_SOUND_YMFPCI_LEGACY
  2328. if (codec->iomidi) {
  2329. unload_uart401(&codec->mpu_data);
  2330. }
  2331. #endif /* CONFIG_SOUND_YMFPCI_LEGACY */
  2332. kfree(codec);
  2333. }
  2334. MODULE_AUTHOR("Jaroslav Kysela");
  2335. MODULE_DESCRIPTION("Yamaha YMF7xx PCI Audio");
  2336. MODULE_LICENSE("GPL");
  2337. static struct pci_driver ymfpci_driver = {
  2338. name: "ymfpci",
  2339. id_table: ymf_id_tbl,
  2340. probe: ymf_probe_one,
  2341. remove:         __devexit_p(ymf_remove_one),
  2342. suspend: ymf_suspend,
  2343. resume: ymf_resume
  2344. };
  2345. static int __init ymf_init_module(void)
  2346. {
  2347. return pci_module_init(&ymfpci_driver);
  2348. }
  2349. static void __exit ymf_cleanup_module (void)
  2350. {
  2351. pci_unregister_driver(&ymfpci_driver);
  2352. }
  2353. module_init(ymf_init_module);
  2354. module_exit(ymf_cleanup_module);