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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * forte.c - ForteMedia FM801 OSS Driver
  3.  *
  4.  * Written by Martin K. Petersen <mkp@mkp.net>
  5.  * Copyright (C) 2002 Hewlett-Packard Company
  6.  *
  7.  * Based upon the ALSA FM801 driver by Jaroslav Kysela and OSS drivers
  8.  * by Thomas Sailer, Alan Cox, Zach Brown, and Jeff Garzik.  Thanks
  9.  * guys!
  10.  *
  11.  * This program is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU General Public License version
  13.  * 2 as published by the Free Software Foundation.
  14.  *
  15.  * This program is distributed in the hope that it will be useful, but
  16.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18.  * General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  23.  * USA
  24.  *
  25.  */
  26.  
  27. /*
  28.  * TODO:
  29.  * MMIO
  30.  * Multichannelize
  31.  * Multichipify
  32.  * MPU401
  33.  * M^Gameport
  34.  */
  35. #include <linux/config.h>
  36. #include <linux/module.h>
  37. #include <linux/kernel.h>
  38. #include <linux/init.h>
  39. #include <linux/spinlock.h>
  40. #include <linux/pci.h>
  41. #include <linux/delay.h>
  42. #include <linux/poll.h>
  43. #include <linux/kernel.h>
  44. #include <linux/sound.h>
  45. #include <linux/ac97_codec.h>
  46. #include <linux/wrapper.h>
  47. #include <linux/proc_fs.h>
  48. #include <asm/uaccess.h>
  49. #include <asm/hardirq.h>
  50. #define DRIVER_NAME "forte"
  51. #define DRIVER_VERSION  "$Id: forte.c,v 1.55 2002/10/02 00:01:42 mkp Exp $"
  52. #define PFX  DRIVER_NAME ": "
  53. #undef M_DEBUG
  54. #ifdef M_DEBUG
  55. #define DPRINTK(args...) printk(KERN_WARNING args)
  56. #else
  57. #define DPRINTK(args...)
  58. #endif
  59. /* Card capabilities */
  60. #define FORTE_CAPS              (DSP_CAP_MMAP | DSP_CAP_TRIGGER)
  61. /* Supported audio formats */
  62. #define FORTE_FMTS (AFMT_U8 | AFMT_S16_LE)
  63. /* Buffers */
  64. #define FORTE_MIN_FRAG_SIZE     256
  65. #define FORTE_MAX_FRAG_SIZE     PAGE_SIZE
  66. #define FORTE_DEF_FRAG_SIZE     256
  67. #define FORTE_MIN_FRAGMENTS     16
  68. #define FORTE_MAX_FRAGMENTS     256
  69. #define FORTE_DEF_FRAGMENTS     16
  70. #define FORTE_MIN_BUF           16386
  71. /* PCI BARs */
  72. #define FORTE_PCM_VOL           0x00    /* PCM Output Volume */
  73. #define FORTE_FM_VOL            0x02    /* FM Output Volume */
  74. #define FORTE_I2S_VOL           0x04    /* I2S Volume */
  75. #define FORTE_REC_SRC           0x06    /* Record Source */
  76. #define FORTE_PLY_CTRL          0x08    /* Playback Control */
  77. #define FORTE_PLY_COUNT         0x0a    /* Playback Count */
  78. #define FORTE_PLY_BUF1          0x0c    /* Playback Buffer I */
  79. #define FORTE_PLY_BUF2          0x10    /* Playback Buffer II */
  80. #define FORTE_CAP_CTRL          0x14    /* Capture Control */
  81. #define FORTE_CAP_COUNT         0x16    /* Capture Count */
  82. #define FORTE_CAP_BUF1          0x18    /* Capture Buffer I */
  83. #define FORTE_CAP_BUF2          0x1c    /* Capture Buffer II */
  84. #define FORTE_CODEC_CTRL        0x22    /* Codec Control */
  85. #define FORTE_I2S_MODE          0x24    /* I2S Mode Control */
  86. #define FORTE_VOLUME            0x26    /* Volume Up/Down/Mute Status */
  87. #define FORTE_I2C_CTRL          0x29    /* I2C Control */
  88. #define FORTE_AC97_CMD          0x2a    /* AC'97 Command */
  89. #define FORTE_AC97_DATA         0x2c    /* AC'97 Data */
  90. #define FORTE_MPU401_DATA       0x30    /* MPU401 Data */
  91. #define FORTE_MPU401_CMD        0x31    /* MPU401 Command */
  92. #define FORTE_GPIO_CTRL         0x52    /* General Purpose I/O Control */
  93. #define FORTE_GEN_CTRL          0x54    /* General Control */
  94. #define FORTE_IRQ_MASK          0x56    /* Interrupt Mask */
  95. #define FORTE_IRQ_STATUS        0x5a    /* Interrupt Status */
  96. #define FORTE_OPL3_BANK0        0x68    /* OPL3 Status Read / Bank 0 Write */
  97. #define FORTE_OPL3_DATA0        0x69    /* OPL3 Data 0 Write */
  98. #define FORTE_OPL3_BANK1        0x6a    /* OPL3 Bank 1 Write */
  99. #define FORTE_OPL3_DATA1        0x6b    /* OPL3 Bank 1 Write */
  100. #define FORTE_POWERDOWN         0x70    /* Blocks Power Down Control */
  101. #define FORTE_CAP_OFFSET        FORTE_CAP_CTRL - FORTE_PLY_CTRL
  102. #define FORTE_AC97_ADDR_SHIFT   10
  103. /* Playback and record control register bits */
  104. #define FORTE_BUF1_LAST         (1<<1)
  105. #define FORTE_BUF2_LAST         (1<<2)
  106. #define FORTE_START             (1<<5)
  107. #define FORTE_PAUSE             (1<<6)
  108. #define FORTE_IMMED_STOP        (1<<7)
  109. #define FORTE_RATE_SHIFT        8
  110. #define FORTE_RATE_MASK         (15 << FORTE_RATE_SHIFT)
  111. #define FORTE_CHANNELS_4        (1<<12) /* Playback only */
  112. #define FORTE_CHANNELS_6        (2<<12) /* Playback only */
  113. #define FORTE_CHANNELS_6MS      (3<<12) /* Playback only */
  114. #define FORTE_CHANNELS_MASK     (3<<12)
  115. #define FORTE_16BIT             (1<<14)
  116. #define FORTE_STEREO            (1<<15)
  117. /* IRQ status bits */
  118. #define FORTE_IRQ_PLAYBACK      (1<<8)
  119. #define FORTE_IRQ_CAPTURE       (1<<9)
  120. #define FORTE_IRQ_VOLUME        (1<<14)
  121. #define FORTE_IRQ_MPU           (1<<15)
  122. /* CODEC control */
  123. #define FORTE_CC_CODEC_RESET    (1<<5)
  124. #define FORTE_CC_AC97_RESET     (1<<6)
  125. /* AC97 cmd */
  126. #define FORTE_AC97_WRITE        (0<<7)
  127. #define FORTE_AC97_READ         (1<<7)
  128. #define FORTE_AC97_DP_INVALID   (0<<8)
  129. #define FORTE_AC97_DP_VALID     (1<<8)
  130. #define FORTE_AC97_PORT_RDY     (0<<9)
  131. #define FORTE_AC97_PORT_BSY     (1<<9)
  132. struct forte_channel {
  133.         const char  *name;
  134. unsigned short ctrl;  /* Ctrl BAR contents */
  135. unsigned long  iobase; /* Ctrl BAR address */
  136. wait_queue_head_t wait;
  137. void  *buf;  /* Buffer */
  138. dma_addr_t buf_handle;  /* Buffer handle */
  139.         unsigned int  record;
  140. unsigned int format;
  141.         unsigned int rate;
  142. unsigned int stereo;
  143. unsigned int frag_sz;  /* Current fragment size */
  144. unsigned int frag_num;  /* Current # of fragments */
  145. unsigned int buf_sz; /* Current buffer size */
  146. unsigned int hwptr; /* Tail */
  147. unsigned int swptr;  /* Head */
  148. unsigned int filled_frags;  /* Fragments currently full */
  149. unsigned int next_buf; /* Index of next buffer */
  150. unsigned int blocked; /* Blocked on I/O */
  151. unsigned int drain; /* Drain queued buffers */
  152. unsigned int active; /* Channel currently in use */
  153. unsigned int mapped; /* mmap */
  154. unsigned int buf_pages; /* Real size of buffer */
  155. unsigned int nr_irqs; /* Number of interrupts */
  156. unsigned int bytes; /* Total bytes */
  157. };
  158. struct forte_chip {
  159. struct pci_dev *pci_dev;
  160. unsigned long iobase;
  161. int irq;
  162. struct semaphore open_sem;  /* Device access */
  163. spinlock_t lock; /* State */
  164. spinlock_t ac97_lock;
  165. struct ac97_codec *ac97;
  166. int multichannel;
  167. int dsp;  /* OSS handle */
  168. int                     trigger; /* mmap I/O trigger */
  169. struct forte_channel play;
  170. struct forte_channel rec;
  171. };
  172. static int channels[] = { 2, 4, 6, };
  173. static int rates[]    = { 5500, 8000, 9600, 11025, 16000, 19200, 
  174.   22050, 32000, 38400, 44100, 48000, };
  175. static struct forte_chip *forte;
  176. static int found;
  177. /* AC97 Codec -------------------------------------------------------------- */
  178. /** 
  179.  * forte_ac97_wait:
  180.  * @chip: fm801 instance whose AC97 codec to wait on
  181.  *
  182.  * FIXME:
  183.  * Stop busy-waiting
  184.  */
  185. static inline int
  186. forte_ac97_wait (struct forte_chip *chip)
  187. {
  188. int i = 10000;
  189. while ( (inw (chip->iobase + FORTE_AC97_CMD) & FORTE_AC97_PORT_BSY) 
  190. && i-- )
  191. cpu_relax();
  192. return i == 0;
  193. }
  194. /**
  195.  * forte_ac97_read:
  196.  * @codec: AC97 codec to read from
  197.  * @reg: register to read
  198.  */
  199. u16
  200. forte_ac97_read (struct ac97_codec *codec, u8 reg)
  201. {
  202. u16 ret = 0;
  203. struct forte_chip *chip = codec->private_data;
  204. spin_lock (&chip->ac97_lock);
  205. /* Knock, knock */
  206. if (forte_ac97_wait (chip)) {
  207. printk (KERN_ERR PFX "ac97_read: Serial bus busyn");
  208. goto out;
  209. }
  210. /* Send read command */
  211. outw (reg | (1<<7), chip->iobase + FORTE_AC97_CMD);
  212. if (forte_ac97_wait (chip)) {
  213. printk (KERN_ERR PFX "ac97_read: Bus busy reading reg 0x%xn",
  214. reg);
  215. goto out;
  216. }
  217. /* Sanity checking */
  218. if (inw (chip->iobase + FORTE_AC97_CMD) & FORTE_AC97_DP_INVALID) {
  219. printk (KERN_ERR PFX "ac97_read: Invalid data port");
  220. goto out;
  221. }
  222. /* Fetch result */
  223. ret = inw (chip->iobase + FORTE_AC97_DATA);
  224.  out:
  225. spin_unlock (&chip->ac97_lock);
  226. return ret;
  227. }
  228. /**
  229.  * forte_ac97_write:
  230.  * @codec: AC97 codec to send command to
  231.  * @reg: register to write
  232.  * @val: value to write
  233.  */
  234. void
  235. forte_ac97_write (struct ac97_codec *codec, u8 reg, u16 val)
  236. {
  237. struct forte_chip *chip = codec->private_data;
  238. spin_lock (&chip->ac97_lock);
  239. /* Knock, knock */
  240. if (forte_ac97_wait (chip)) {
  241. printk (KERN_ERR PFX "ac97_write: Serial bus busyn");
  242. goto out;
  243. }
  244. outw (val, chip->iobase + FORTE_AC97_DATA);
  245. outb (reg | FORTE_AC97_WRITE, chip->iobase + FORTE_AC97_CMD);
  246. /* Wait for completion */
  247. if (forte_ac97_wait (chip)) {
  248. printk (KERN_ERR PFX "ac97_write: Bus busy after writen");
  249. goto out;
  250. }
  251.  out:
  252. spin_unlock (&chip->ac97_lock);
  253. }
  254. /* Mixer ------------------------------------------------------------------- */
  255. /**
  256.  * forte_mixer_open:
  257.  * @inode:
  258.  * @file:
  259.  */
  260. static int
  261. forte_mixer_open (struct inode *inode, struct file *file)
  262. {
  263. struct forte_chip *chip = forte;
  264. MOD_INC_USE_COUNT;
  265. file->private_data = chip->ac97;
  266. return 0;
  267. }
  268. /**
  269.  * forte_mixer_release:
  270.  * @inode:
  271.  * @file:
  272.  */
  273. static int
  274. forte_mixer_release (struct inode *inode, struct file *file)
  275. {
  276. /* We will welease Wodewick */
  277. MOD_DEC_USE_COUNT;
  278. return 0;
  279. }
  280. /**
  281.  * forte_mixer_ioctl:
  282.  * @inode:
  283.  * @file:
  284.  */
  285. static int
  286. forte_mixer_ioctl (struct inode *inode, struct file *file, 
  287.    unsigned int cmd, unsigned long arg)
  288. {
  289. struct ac97_codec *codec = (struct ac97_codec *) file->private_data;
  290. return codec->mixer_ioctl (codec, cmd, arg);
  291. }
  292. static struct file_operations forte_mixer_fops = {
  293. owner:      THIS_MODULE,
  294. llseek:          no_llseek,
  295. ioctl:           forte_mixer_ioctl,
  296. open:            forte_mixer_open,
  297. release:         forte_mixer_release,
  298. };
  299. /* Channel ----------------------------------------------------------------- */
  300. /** 
  301.  * forte_channel_reset:
  302.  * @channel: Channel to reset
  303.  * 
  304.  * Locking: Must be called with lock held.
  305.  */
  306. static void
  307. forte_channel_reset (struct forte_channel *channel)
  308. {
  309. if (!channel || !channel->iobase)
  310. return;
  311. DPRINTK ("%s: channel = %sn", __FUNCTION__, channel->name);
  312. channel->ctrl &= ~FORTE_START;
  313. outw (channel->ctrl, channel->iobase + FORTE_PLY_CTRL);
  314. /* We always play at least two fragments, hence these defaults */
  315.   channel->hwptr = channel->frag_sz;
  316. channel->next_buf = 1;
  317. channel->swptr = 0;
  318. channel->filled_frags = 0;
  319. channel->blocked = 0;
  320. channel->drain = 0;
  321. channel->active = 0;
  322. channel->bytes = 0;
  323. channel->nr_irqs = 0;
  324. channel->mapped = 0;
  325. }
  326. /** 
  327.  * forte_channel_start:
  328.  * @channel:  Channel to start (record/playback)
  329.  *
  330.  * Locking: Must be called with lock held.
  331.  */
  332. static void inline
  333. forte_channel_start (struct forte_channel *channel)
  334. {
  335. if (!channel || !channel->iobase) 
  336. return;
  337. DPRINTK ("%s: channel = %sn", __FUNCTION__, channel->name);
  338. channel->ctrl &= ~(FORTE_PAUSE | FORTE_BUF1_LAST | FORTE_BUF2_LAST);
  339. channel->ctrl |= FORTE_START;
  340. channel->active = 1;
  341. outw (channel->ctrl, channel->iobase + FORTE_PLY_CTRL);
  342. }
  343. /** 
  344.  * forte_channel_stop:
  345.  * @channel:  Channel to stop
  346.  *
  347.  * Locking: Must be called with lock held.
  348.  */
  349. static void inline
  350. forte_channel_stop (struct forte_channel *channel)
  351. {
  352. if (!channel || !channel->iobase) 
  353. return;
  354. DPRINTK ("%s: channel = %sn", __FUNCTION__, channel->name);
  355. channel->ctrl &= ~FORTE_START;
  356. channel->active = 0;
  357. outw (channel->ctrl, channel->iobase + FORTE_PLY_CTRL);
  358. }
  359. /** 
  360.  * forte_channel_rate:
  361.  * @channel:  Channel whose rate to set.  Playback and record are
  362.  *            independent.
  363.  * @rate:     Channel rate in Hz
  364.  *
  365.  * Locking: Must be called with lock held.
  366.  */
  367. static int
  368. forte_channel_rate (struct forte_channel *channel, unsigned int rate)
  369. {
  370. int new_rate;
  371. if (!channel || !channel->iobase) 
  372. return -EINVAL;
  373. /* The FM801 only supports a handful of fixed frequencies.
  374.  * We find the value closest to what userland requested.
  375.  */
  376. if      (rate <= 6250)  { rate = 5500;  new_rate =  0; }
  377. else if (rate <= 8800)  { rate = 8000;  new_rate =  1; }
  378. else if (rate <= 10312) { rate = 9600;  new_rate =  2; }
  379. else if (rate <= 13512) { rate = 11025; new_rate =  3; }
  380. else if (rate <= 17600) { rate = 16000; new_rate =  4; }
  381. else if (rate <= 20625) { rate = 19200; new_rate =  5; }
  382. else if (rate <= 27025) { rate = 22050; new_rate =  6; }
  383. else if (rate <= 35200) { rate = 32000; new_rate =  7; }
  384. else if (rate <= 41250) { rate = 38400; new_rate =  8; }
  385. else if (rate <= 46050) { rate = 44100; new_rate =  9; }
  386. else                    { rate = 48000; new_rate = 10; }
  387. channel->ctrl &= ~FORTE_RATE_MASK;
  388. channel->ctrl |= new_rate << FORTE_RATE_SHIFT;
  389. channel->rate = rate;
  390. DPRINTK ("%s: %s rate = %dn", __FUNCTION__, channel->name, rate);
  391. return rate;
  392. }
  393. /** 
  394.  * forte_channel_format:
  395.  * @channel:  Channel whose audio format to set
  396.  * @format:   OSS format ID
  397.  *
  398.  * Locking: Must be called with lock held.
  399.  */
  400. static int
  401. forte_channel_format (struct forte_channel *channel, int format)
  402. {
  403. if (!channel || !channel->iobase) 
  404. return -EINVAL;
  405. switch (format) {
  406. case AFMT_QUERY:
  407. break;
  408. case AFMT_U8:
  409. channel->ctrl &= ~FORTE_16BIT;
  410. channel->format = AFMT_U8;
  411. break;
  412. case AFMT_S16_LE:
  413. default:
  414. channel->ctrl |= FORTE_16BIT;
  415. channel->format = AFMT_S16_LE;
  416. break;
  417. }
  418. DPRINTK ("%s: %s want %d format, got %dn", __FUNCTION__, channel->name, 
  419.  format, channel->format);
  420. return channel->format;
  421. }
  422. /** 
  423.  * forte_channel_stereo:
  424.  * @channel:  Channel to toggle
  425.  * @stereo:   0 for Mono, 1 for Stereo
  426.  *
  427.  * Locking: Must be called with lock held.
  428.  */
  429. static int
  430. forte_channel_stereo (struct forte_channel *channel, unsigned int stereo)
  431. {
  432. int ret;
  433. if (!channel || !channel->iobase)
  434. return -EINVAL;
  435. DPRINTK ("%s: %s stereo = %dn", __FUNCTION__, channel->name, stereo);
  436. switch (stereo) {
  437. case 0:
  438. channel->ctrl &= ~(FORTE_STEREO | FORTE_CHANNELS_MASK);
  439. channel-> stereo = stereo;
  440. ret = stereo;
  441. break;
  442. case 1:
  443. channel->ctrl &= ~FORTE_CHANNELS_MASK;
  444. channel->ctrl |= FORTE_STEREO;
  445. channel-> stereo = stereo;
  446. ret = stereo;
  447. break;
  448. default:
  449. DPRINTK ("Unsupported channel format");
  450. ret = -EINVAL;
  451. break;
  452. }
  453. return ret;
  454. }
  455. /** 
  456.  * forte_channel_buffer:
  457.  * @channel: Channel whose buffer to set up
  458.  *
  459.  * Locking: Must be called with lock held.
  460.  *
  461.  * FIXME: Buffer scaling dependent on rate/channels/bits
  462.  */
  463. static void
  464. forte_channel_buffer (struct forte_channel *channel, int sz, int num)
  465. {
  466. /* Go away, I'm busy */
  467. if (channel->filled_frags || channel->bytes)
  468. return;
  469. channel->frag_sz = sz;
  470. channel->frag_num = num;
  471. if (channel->frag_sz < FORTE_MIN_FRAG_SIZE)
  472. channel->frag_sz = FORTE_MIN_FRAG_SIZE;
  473. if (channel->frag_sz > FORTE_MAX_FRAG_SIZE)
  474. channel->frag_sz = FORTE_MAX_FRAG_SIZE;
  475. if (channel->frag_num < FORTE_MIN_FRAGMENTS)
  476. channel->frag_num = FORTE_MIN_FRAGMENTS;
  477. if (channel->frag_num > FORTE_MAX_FRAGMENTS)
  478. channel->frag_num = FORTE_MAX_FRAGMENTS;
  479. if (channel->frag_sz * channel->frag_num < FORTE_MIN_BUF)
  480. channel->frag_num = FORTE_MIN_BUF / channel->frag_sz;
  481. channel->buf_sz = channel->frag_sz * channel->frag_num;
  482. DPRINTK ("%s: %s frag_sz = %d, frag_num = %d, buf_sz = %dn", 
  483.  __FUNCTION__, channel->name, channel->frag_sz, 
  484.  channel->frag_num, channel->buf_sz);
  485. }
  486. /** 
  487.  * forte_channel_prep:
  488.  * @channel: Channel whose buffer to prepare
  489.  *
  490.  * Locking: Lock held.
  491.  */
  492. static void
  493. forte_channel_prep (struct forte_channel *channel)
  494. {
  495. struct page *page;
  496. int i;
  497. if (channel->buf)
  498. return;
  499. channel->buf_pages = channel->buf_sz >> PAGE_SHIFT;
  500. if (channel->buf_sz % PAGE_SIZE)
  501. channel->buf_pages++;
  502. DPRINTK ("%s: %s frag_sz = %d, frag_num = %d, buf_sz = %d, pg = %dn", 
  503.  __FUNCTION__, channel->name, channel->frag_sz, 
  504.  channel->frag_num, channel->buf_sz, channel->buf_pages);
  505. /* DMA buffer */
  506. channel->buf = pci_alloc_consistent (forte->pci_dev, 
  507.      channel->buf_pages * PAGE_SIZE,
  508.      &channel->buf_handle);
  509. if (!channel->buf || !channel->buf_handle)
  510. BUG();
  511. page = virt_to_page (channel->buf);
  512. for (i = 0 ; i < channel->buf_pages ; i++)
  513. mem_map_reserve (page++);
  514. /* Prep buffer registers */
  515. outw (channel->frag_sz - 1, channel->iobase + FORTE_PLY_COUNT);
  516. outl (channel->buf_handle, channel->iobase + FORTE_PLY_BUF1);
  517. outl (channel->buf_handle + channel->frag_sz, 
  518.       channel->iobase + FORTE_PLY_BUF2);
  519. /* Reset hwptr */
  520.   channel->hwptr = channel->frag_sz;
  521. channel->next_buf = 1;
  522. DPRINTK ("%s: %s buffer @ %p (%p)n", __FUNCTION__, channel->name, 
  523.  channel->buf, channel->buf_handle);
  524. }
  525. /** 
  526.  * forte_channel_drain:
  527.  * @chip:
  528.  * @channel:
  529.  *
  530.  * Locking: Don't hold the lock.
  531.  */
  532. static inline int
  533. forte_channel_drain (struct forte_channel *channel)
  534. {
  535. DECLARE_WAITQUEUE (wait, current);
  536. unsigned long flags;
  537. if (!channel->active)
  538. return 0;
  539. if (channel->mapped) {
  540. spin_lock_irqsave (&forte->lock, flags);
  541. forte_channel_stop (channel);
  542. spin_unlock_irqrestore (&forte->lock, flags);
  543. return 0;
  544. }
  545. channel->drain = 1;
  546. add_wait_queue (&channel->wait, &wait);
  547. for (;;) {
  548. spin_lock_irqsave (&forte->lock, flags);
  549. if (channel->active == 0 || channel->filled_frags < 1)
  550. break;
  551. spin_unlock_irqrestore (&forte->lock, flags);
  552. __set_current_state (TASK_INTERRUPTIBLE);
  553. schedule();
  554. }
  555. channel->drain = 0;
  556. spin_unlock_irqrestore (&forte->lock, flags);
  557. set_current_state (TASK_RUNNING);
  558. remove_wait_queue (&channel->wait, &wait);
  559. return 0;
  560. }
  561. /** 
  562.  * forte_channel_init:
  563.  * @chip:  Forte chip instance the channel hangs off
  564.  * @channel:  Channel to initialize
  565.  *
  566.  * Description:
  567.  *         Initializes a channel, sets defaults, and allocates
  568.  *         buffers.
  569.  *
  570.  * Locking: No lock held.
  571.  */
  572. static int
  573. forte_channel_init (struct forte_chip *chip, struct forte_channel *channel)
  574. {
  575. DPRINTK ("%s: chip iobase @ %pn", __FUNCTION__, (void *)chip->iobase);
  576. spin_lock_irq (&chip->lock);
  577. memset (channel, 0x0, sizeof (*channel));
  578. if (channel == &chip->play) {
  579. channel->name = "PCM_OUT";
  580. channel->iobase = chip->iobase;
  581. DPRINTK ("%s: PCM-OUT iobase @ %pn", __FUNCTION__,
  582.  (void *) channel->iobase);
  583. }
  584. else if (channel == &chip->rec) {
  585. channel->name = "PCM_IN";
  586. channel->iobase = chip->iobase + FORTE_CAP_OFFSET;
  587. channel->record = 1;
  588. DPRINTK ("%s: PCM-IN iobase @ %pn", __FUNCTION__, 
  589.  (void *) channel->iobase);
  590. }
  591. else
  592. BUG();
  593. init_waitqueue_head (&channel->wait);
  594. /* Defaults: 48kHz, 16-bit, stereo */
  595. channel->ctrl = inw (channel->iobase + FORTE_PLY_CTRL);
  596. forte_channel_reset (channel);
  597. forte_channel_stereo (channel, 1);
  598. forte_channel_format (channel, AFMT_S16_LE);
  599. forte_channel_rate (channel, 48000);
  600. forte_channel_buffer (channel, FORTE_DEF_FRAG_SIZE, 
  601.       FORTE_DEF_FRAGMENTS);
  602. chip->trigger = 0;
  603. spin_unlock_irq (&chip->lock);
  604. return 0;
  605. }
  606. /** 
  607.  * forte_channel_free:
  608.  * @chip: Chip this channel hangs off
  609.  * @channel: Channel to nuke 
  610.  *
  611.  * Description:
  612.  *  Resets channel and frees buffers.
  613.  *
  614.  * Locking: Hold your horses.
  615.  */
  616. static void
  617. forte_channel_free (struct forte_chip *chip, struct forte_channel *channel)
  618. {
  619. DPRINTK ("%s: %sn", __FUNCTION__, channel->name);
  620. if (!channel->buf_handle)
  621. return;
  622. pci_free_consistent (chip->pci_dev, channel->buf_pages * PAGE_SIZE, 
  623.      channel->buf, channel->buf_handle);
  624. memset (channel, 0x0, sizeof (*channel));
  625. }
  626. /* DSP --------------------------------------------------------------------- */
  627. /**
  628.  * forte_dsp_ioctl:
  629.  */
  630. static int
  631. forte_dsp_ioctl (struct inode *inode, struct file *file, unsigned int cmd,
  632.  unsigned long arg)
  633. {
  634. int ival=0, ret, rval=0, rd, wr, count;
  635. struct forte_chip *chip;
  636. struct audio_buf_info abi;
  637. struct count_info cinfo;
  638. chip = file->private_data;
  639. if (file->f_mode & FMODE_WRITE)
  640. wr = 1;
  641. else 
  642. wr = 0;
  643. if (file->f_mode & FMODE_READ)
  644. rd = 1;
  645. else
  646. rd = 0;
  647. switch (cmd) {
  648. case OSS_GETVERSION:
  649. return put_user (SOUND_VERSION, (int *) arg);
  650. case SNDCTL_DSP_GETCAPS:
  651. DPRINTK ("%s: GETCAPSn", __FUNCTION__);
  652. ival = FORTE_CAPS; /* DUPLEX */
  653. return put_user (ival, (int *) arg);
  654. case SNDCTL_DSP_GETFMTS:
  655. DPRINTK ("%s: GETFMTSn", __FUNCTION__);
  656. ival = FORTE_FMTS; /* U8, 16LE */
  657. return put_user (ival, (int *) arg);
  658. case SNDCTL_DSP_SETFMT: /* U8, 16LE */
  659. DPRINTK ("%s: SETFMTn", __FUNCTION__);
  660. if (get_user (ival, (int *) arg))
  661. return -EFAULT;
  662. spin_lock_irq (&chip->lock);
  663. if (rd) {
  664. forte_channel_stop (&chip->rec);
  665. rval = forte_channel_format (&chip->rec, ival);
  666. }
  667. if (wr) {
  668. forte_channel_stop (&chip->rec);
  669. rval = forte_channel_format (&chip->play, ival);
  670. }
  671. spin_unlock_irq (&chip->lock);
  672. return put_user (rval, (int *) arg);
  673. case SNDCTL_DSP_STEREO: /* 0 - mono, 1 - stereo */
  674. DPRINTK ("%s: STEREOn", __FUNCTION__);
  675. if (get_user (ival, (int *) arg))
  676. return -EFAULT;
  677. spin_lock_irq (&chip->lock);
  678. if (rd) {
  679. forte_channel_stop (&chip->rec);
  680. rval = forte_channel_stereo (&chip->rec, ival);
  681. }
  682. if (wr) {
  683. forte_channel_stop (&chip->rec);
  684. rval = forte_channel_stereo (&chip->play, ival);
  685. }
  686. spin_unlock_irq (&chip->lock);
  687.                 return put_user (rval, (int *) arg);
  688. case SNDCTL_DSP_CHANNELS: /* 1 - mono, 2 - stereo */
  689. DPRINTK ("%s: CHANNELSn", __FUNCTION__);
  690. if (get_user (ival, (int *) arg))
  691. return -EFAULT;
  692. spin_lock_irq (&chip->lock);
  693. if (rd) {
  694. forte_channel_stop (&chip->rec);
  695. rval = forte_channel_stereo (&chip->rec, ival-1) + 1;
  696. }
  697. if (wr) {
  698. forte_channel_stop (&chip->play);
  699. rval = forte_channel_stereo (&chip->play, ival-1) + 1;
  700. }
  701. spin_unlock_irq (&chip->lock);
  702.                 return put_user (rval, (int *) arg);
  703. case SNDCTL_DSP_SPEED:
  704. DPRINTK ("%s: SPEEDn", __FUNCTION__);
  705. if (get_user (ival, (int *) arg))
  706.                         return -EFAULT;
  707. spin_lock_irq (&chip->lock);
  708. if (rd) {
  709. forte_channel_stop (&chip->rec);
  710. rval = forte_channel_rate (&chip->rec, ival);
  711. }
  712. if (wr) {
  713. forte_channel_stop (&chip->play);
  714. rval = forte_channel_rate (&chip->play, ival);
  715. }
  716. spin_unlock_irq (&chip->lock);
  717.                 return put_user(rval, (int*) arg);
  718. case SNDCTL_DSP_GETBLKSIZE:
  719. DPRINTK ("%s: GETBLKSIZEn", __FUNCTION__);
  720. spin_lock_irq (&chip->lock);
  721. if (rd)
  722. ival = chip->rec.frag_sz;
  723. if (wr)
  724. ival = chip->play.frag_sz;
  725. spin_unlock_irq (&chip->lock);
  726.                 return put_user (ival, (int *) arg);
  727. case SNDCTL_DSP_RESET:
  728. DPRINTK ("%s: RESETn", __FUNCTION__);
  729. spin_lock_irq (&chip->lock);
  730. if (rd)
  731. forte_channel_reset (&chip->rec);
  732. if (wr)
  733. forte_channel_reset (&chip->play);
  734. spin_unlock_irq (&chip->lock);
  735.                 return 0;
  736. case SNDCTL_DSP_SYNC:
  737. DPRINTK ("%s: SYNCn", __FUNCTION__);
  738. if (wr) {
  739. ret = forte_channel_drain (&chip->play);
  740. spin_lock_irq (&chip->lock);
  741. forte_channel_reset (&chip->play);
  742. spin_unlock_irq (&chip->lock);
  743. }
  744. return 0;
  745. case SNDCTL_DSP_POST:
  746. DPRINTK ("%s: POSTn", __FUNCTION__);
  747. if (wr) {
  748. spin_lock_irq (&chip->lock);
  749. forte_channel_reset (&chip->play);
  750. spin_unlock_irq (&chip->lock);
  751. }
  752.                 return 0;
  753. case SNDCTL_DSP_SETFRAGMENT:
  754. DPRINTK ("%s: SETFRAGMENTn", __FUNCTION__);
  755. if (get_user (ival, (int *) arg))
  756. return -EFAULT;
  757. spin_lock_irq (&chip->lock);
  758. if (rd) {
  759. forte_channel_buffer (&chip->rec, ival & 0xffff, 
  760.       (ival >> 16) & 0xffff);
  761. ival = (chip->rec.frag_num << 16) + chip->rec.frag_sz;
  762. }
  763. if (wr) {
  764. forte_channel_buffer (&chip->play, ival & 0xffff, 
  765.       (ival >> 16) & 0xffff);
  766. ival = (chip->play.frag_num << 16) +chip->play.frag_sz;
  767. }
  768. spin_unlock_irq (&chip->lock);
  769. return put_user (ival, (int *) arg);
  770.                 
  771.         case SNDCTL_DSP_GETISPACE:
  772. DPRINTK ("%s: GETISPACEn", __FUNCTION__);
  773. if (!rd)
  774. return -EINVAL;
  775. spin_lock_irq (&chip->lock);
  776. abi.fragstotal = chip->rec.frag_num;
  777. abi.fragsize = chip->rec.frag_sz;
  778. if (chip->rec.mapped) {
  779. abi.fragments = chip->rec.frag_num - 2;
  780. abi.bytes = abi.fragments * abi.fragsize;
  781. }
  782. else {
  783. abi.fragments = chip->rec.filled_frags;
  784. abi.bytes = abi.fragments * abi.fragsize;
  785. }
  786. spin_unlock_irq (&chip->lock);
  787. return copy_to_user ((void *) arg, &abi, sizeof (abi));
  788. case SNDCTL_DSP_GETIPTR:
  789. DPRINTK ("%s: GETIPTRn", __FUNCTION__);
  790. if (!rd)
  791. return -EINVAL;
  792. spin_lock_irq (&chip->lock);
  793. if (chip->rec.active) 
  794. cinfo.ptr = chip->rec.hwptr;
  795. else
  796. cinfo.ptr = 0;
  797. cinfo.bytes = chip->rec.bytes;
  798. cinfo.blocks = chip->rec.nr_irqs;
  799. chip->rec.nr_irqs = 0;
  800. spin_unlock_irq (&chip->lock);
  801. return copy_to_user ((void *) arg, &cinfo, sizeof (cinfo));
  802.         case SNDCTL_DSP_GETOSPACE:
  803. if (!wr)
  804. return -EINVAL;
  805. spin_lock_irq (&chip->lock);
  806. abi.fragstotal = chip->play.frag_num;
  807. abi.fragsize = chip->play.frag_sz;
  808. if (chip->play.mapped) {
  809. abi.fragments = chip->play.frag_num - 2;
  810. abi.bytes = chip->play.buf_sz;
  811. }
  812. else {
  813. abi.fragments = chip->play.frag_num - 
  814. chip->play.filled_frags;
  815. abi.bytes = abi.fragments * abi.fragsize;
  816. }
  817. spin_unlock_irq (&chip->lock);
  818. return copy_to_user ((void *) arg, &abi, sizeof (abi));
  819. case SNDCTL_DSP_GETOPTR:
  820. if (!wr)
  821. return -EINVAL;
  822. spin_lock_irq (&chip->lock);
  823. if (chip->play.active) 
  824. cinfo.ptr = chip->play.hwptr;
  825. else
  826. cinfo.ptr = 0;
  827. cinfo.bytes = chip->play.bytes;
  828. cinfo.blocks = chip->play.nr_irqs;
  829. chip->play.nr_irqs = 0;
  830. spin_unlock_irq (&chip->lock);
  831. return copy_to_user ((void *) arg, &cinfo, sizeof (cinfo));
  832. case SNDCTL_DSP_GETODELAY:
  833. if (!chip->play.active)
  834. return 0;
  835. if (!wr)
  836. return -EINVAL;
  837. spin_lock_irq (&chip->lock);
  838. if (chip->play.mapped) {
  839. count = inw (chip->play.iobase + FORTE_PLY_COUNT) + 1;
  840. ival = chip->play.frag_sz - count;
  841. }
  842. else {
  843. ival = chip->play.filled_frags * chip->play.frag_sz;
  844. }
  845. spin_unlock_irq (&chip->lock);
  846. return put_user (ival, (int *) arg);
  847. case SNDCTL_DSP_SETDUPLEX:
  848. DPRINTK ("%s: SETDUPLEXn", __FUNCTION__);
  849. return -EINVAL;
  850. case SNDCTL_DSP_GETTRIGGER:
  851. DPRINTK ("%s: GETTRIGGERn", __FUNCTION__);
  852. return put_user (chip->trigger, (int *) arg);
  853. case SNDCTL_DSP_SETTRIGGER:
  854. if (get_user (ival, (int *) arg))
  855. return -EFAULT;
  856. DPRINTK ("%s: SETTRIGGER %dn", __FUNCTION__, ival);
  857. if (wr) {
  858. spin_lock_irq (&chip->lock);
  859. if (ival & PCM_ENABLE_OUTPUT)
  860. forte_channel_start (&chip->play);
  861. else {
  862. chip->trigger = 1;
  863. forte_channel_prep (&chip->play);
  864. forte_channel_stop (&chip->play);
  865. }
  866. spin_unlock_irq (&chip->lock);
  867. }
  868. else if (rd) {
  869. spin_lock_irq (&chip->lock);
  870. if (ival & PCM_ENABLE_INPUT)
  871. forte_channel_start (&chip->rec);
  872. else {
  873. chip->trigger = 1;
  874. forte_channel_prep (&chip->rec);
  875. forte_channel_stop (&chip->rec);
  876. }
  877. spin_unlock_irq (&chip->lock);
  878. }
  879. return 0;
  880. case SOUND_PCM_READ_RATE:
  881. DPRINTK ("%s: PCM_READ_RATEn", __FUNCTION__);
  882. return put_user (chip->play.rate, (int *) arg);
  883. case SOUND_PCM_READ_CHANNELS:
  884. DPRINTK ("%s: PCM_READ_CHANNELSn", __FUNCTION__);
  885. return put_user (chip->play.stereo, (int *) arg);
  886. case SOUND_PCM_READ_BITS:
  887. DPRINTK ("%s: PCM_READ_BITSn", __FUNCTION__);
  888. return put_user (chip->play.format, (int *) arg);
  889. default:
  890. DPRINTK ("Unsupported ioctl: %x (%p)n", cmd, (void *) arg);
  891. break;
  892. }
  893. return -EINVAL;
  894. }
  895. /**
  896.  * forte_dsp_open:
  897.  */
  898. static int 
  899. forte_dsp_open (struct inode *inode, struct file *file)
  900. {
  901. struct forte_chip *chip = forte; /* FIXME: HACK FROM HELL! */
  902. if (down_interruptible (&chip->open_sem)) {
  903. DPRINTK ("%s: returning -ERESTARTSYSn", __FUNCTION__);
  904. return -ERESTARTSYS;
  905. }
  906. file->private_data = forte;
  907. DPRINTK ("%s: chip @ %pn", __FUNCTION__, file->private_data);
  908. if (file->f_mode & FMODE_WRITE)
  909. forte_channel_init (forte, &forte->play);
  910. if (file->f_mode & FMODE_READ)
  911. forte_channel_init (forte, &forte->rec);
  912. return 0;
  913. }
  914. /**
  915.  * forte_dsp_release:
  916.  */
  917. static int 
  918. forte_dsp_release (struct inode *inode, struct file *file)
  919. {
  920. struct forte_chip *chip = file->private_data;
  921. int ret = 0;
  922. DPRINTK ("%s: chip @ %pn", __FUNCTION__, chip);
  923. if (file->f_mode & FMODE_WRITE) {
  924. forte_channel_drain (&chip->play);
  925. spin_lock_irq (&chip->lock);
  926. chip->play.ctrl |= FORTE_IMMED_STOP;
  927. forte_channel_stop (&chip->play);
  928. forte_channel_free (chip, &chip->play);
  929. spin_unlock_irq (&chip->lock);
  930.         }
  931. if (file->f_mode & FMODE_READ) {
  932. while (chip->rec.filled_frags > 0)
  933. interruptible_sleep_on (&chip->rec.wait);
  934. spin_lock_irq (&chip->lock);
  935. chip->play.ctrl |= FORTE_IMMED_STOP;
  936. forte_channel_stop (&chip->rec);
  937. forte_channel_free (chip, &chip->rec);
  938. spin_unlock_irq (&chip->lock);
  939. }
  940. up (&chip->open_sem);
  941. return ret;
  942. }
  943. /**
  944.  * forte_dsp_poll:
  945.  *
  946.  * FIXME: Racy
  947.  */
  948. static unsigned int 
  949. forte_dsp_poll (struct file *file, struct poll_table_struct *wait)
  950. {
  951. struct forte_chip *chip;
  952. struct forte_channel *channel;
  953. unsigned int mask = 0;
  954. chip = file->private_data;
  955. if (file->f_mode & FMODE_WRITE) {
  956. channel = &chip->play;
  957. if (channel->active)
  958. poll_wait (file, &channel->wait, wait);
  959. if (channel->filled_frags)
  960. mask |= POLLOUT | POLLWRNORM;
  961. }
  962. if (file->f_mode & FMODE_READ) {
  963. channel = &chip->rec;
  964. if (channel->active)
  965. poll_wait (file, &channel->wait, wait);
  966. if (channel->filled_frags > 0)
  967. mask |= POLLIN | POLLRDNORM;
  968. }
  969. return mask;
  970. }
  971. /**
  972.  * forte_dsp_mmap:
  973.  */
  974. static int
  975. forte_dsp_mmap (struct file *file, struct vm_area_struct *vma)
  976. {
  977. struct forte_chip *chip;
  978. struct forte_channel *channel;
  979. unsigned long size;
  980. int ret;
  981. chip = file->private_data;
  982. DPRINTK ("%s: start %lXh, size %ld, pgoff %ldn", __FUNCTION__,
  983.                  vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_pgoff);
  984. spin_lock_irq (&chip->lock);
  985. if (vma->vm_flags & VM_WRITE && chip->play.active) {
  986. ret = -EBUSY;
  987. goto out;
  988. }
  989.         if (vma->vm_flags & VM_READ && chip->rec.active) {
  990. ret = -EBUSY;
  991. goto out;
  992.         }
  993. if (file->f_mode & FMODE_WRITE)
  994. channel = &chip->play;
  995. else if (file->f_mode & FMODE_READ)
  996. channel = &chip->rec;
  997. else {
  998. ret = -EINVAL;
  999. goto out;
  1000. }
  1001. forte_channel_prep (channel);
  1002. channel->mapped = 1;
  1003.         if (vma->vm_pgoff != 0) {
  1004. ret = -EINVAL;
  1005.                 goto out;
  1006. }
  1007.         size = vma->vm_end - vma->vm_start;
  1008.         if (size > channel->buf_pages * PAGE_SIZE) {
  1009. DPRINTK ("%s: size (%ld) > buf_sz (%d) n", __FUNCTION__,
  1010.  size, channel->buf_sz);
  1011. ret = -EINVAL;
  1012.                 goto out;
  1013. }
  1014.         if (remap_page_range (vma->vm_start, virt_to_phys (channel->buf),
  1015.       size, vma->vm_page_prot)) {
  1016. DPRINTK ("%s: remap el a no workon", __FUNCTION__);
  1017. ret = -EAGAIN;
  1018.                 goto out;
  1019. }
  1020.         ret = 0;
  1021.  out:
  1022. spin_unlock_irq (&chip->lock);
  1023.         return ret;
  1024. }
  1025. /**
  1026.  * forte_dsp_write:
  1027.  */
  1028. static ssize_t 
  1029. forte_dsp_write (struct file *file, const char *buffer, size_t bytes, 
  1030.  loff_t *ppos)
  1031. {
  1032. struct forte_chip *chip;
  1033. struct forte_channel *channel;
  1034. unsigned int i = bytes, sz = 0;
  1035. unsigned long flags;
  1036. if (ppos != &file->f_pos)
  1037. return -ESPIPE;
  1038. if (!access_ok (VERIFY_READ, buffer, bytes))
  1039. return -EFAULT;
  1040. chip = (struct forte_chip *) file->private_data;
  1041. if (!chip)
  1042. BUG();
  1043. channel = &chip->play;
  1044. if (!channel)
  1045. BUG();
  1046. spin_lock_irqsave (&chip->lock, flags);
  1047. /* Set up buffers with the right fragment size */
  1048. forte_channel_prep (channel);
  1049. while (i) {
  1050. /* All fragment buffers in use -> wait */
  1051. if (channel->frag_num - channel->filled_frags == 0) {
  1052. DECLARE_WAITQUEUE (wait, current);
  1053. /* For trigger mode operation, get out */
  1054. if (chip->trigger) {
  1055. spin_unlock_irqrestore (&chip->lock, flags);
  1056. return -EAGAIN;
  1057. }
  1058. /* Otherwise wait for buffers */
  1059. channel->blocked = 1;
  1060. add_wait_queue (&channel->wait, &wait);
  1061. for (;;) {
  1062. if (channel->active == 0)
  1063. break;
  1064. if (channel->frag_num - channel->filled_frags)
  1065. break;
  1066. spin_unlock_irqrestore (&chip->lock, flags);
  1067. set_current_state (TASK_INTERRUPTIBLE);
  1068. schedule();
  1069. spin_lock_irqsave (&chip->lock, flags);
  1070. }
  1071. set_current_state (TASK_RUNNING);
  1072. remove_wait_queue (&channel->wait, &wait);
  1073. channel->blocked = 0;
  1074. }
  1075. if (i > channel->frag_sz)
  1076. sz = channel->frag_sz;
  1077. else
  1078. sz = i;
  1079. spin_unlock_irqrestore (&chip->lock, flags);
  1080. /* Clear the fragment so we don't get noise when copying
  1081.  * smaller buffers
  1082.  */
  1083. memset ((void *) channel->buf + channel->swptr, 0x0, sz);
  1084. if (copy_from_user ((void *) channel->buf + channel->swptr, 
  1085.     buffer, sz)) {
  1086. return -EFAULT;
  1087. }
  1088. spin_lock_irqsave (&chip->lock, flags);
  1089. /* Advance software pointer */
  1090. buffer += sz;
  1091. channel->filled_frags++;
  1092. channel->swptr += channel->frag_sz;
  1093. channel->swptr %= channel->buf_sz;
  1094. i -= sz;
  1095. /* If playback isn't active, start it */
  1096. if (channel->active == 0 && chip->trigger == 0)
  1097. forte_channel_start (channel);
  1098. }
  1099. spin_unlock_irqrestore (&chip->lock, flags);
  1100. return bytes - i;
  1101. }
  1102. /**
  1103.  * forte_dsp_read:
  1104.  */
  1105. static ssize_t 
  1106. forte_dsp_read (struct file *file, char *buffer, size_t bytes, 
  1107. loff_t *ppos)
  1108. {
  1109. struct forte_chip *chip;
  1110. struct forte_channel *channel;
  1111. unsigned int i = bytes, sz;
  1112. unsigned long flags;
  1113. if (ppos != &file->f_pos)
  1114. return -ESPIPE;
  1115. if (!access_ok (VERIFY_WRITE, buffer, bytes))
  1116. return -EFAULT;
  1117. chip = (struct forte_chip *) file->private_data;
  1118. if (!chip)
  1119. BUG();
  1120. channel = &chip->rec;
  1121. if (!channel)
  1122. BUG();
  1123. spin_lock_irqsave (&chip->lock, flags);
  1124. /* Set up buffers with the right fragment size */
  1125. forte_channel_prep (channel);
  1126. /* Start recording */
  1127. if (!chip->trigger)
  1128. forte_channel_start (channel);
  1129. while (i) {
  1130. /* No fragment buffers in use -> wait */
  1131. if (channel->filled_frags == 0) {
  1132. DECLARE_WAITQUEUE (wait, current);
  1133. /* For trigger mode operation, get out */
  1134. if (chip->trigger) {
  1135. spin_unlock_irqrestore (&chip->lock, flags);
  1136. return -EAGAIN;
  1137. }
  1138. channel->blocked = 1;
  1139. add_wait_queue (&channel->wait, &wait);
  1140. for (;;) {
  1141. if (channel->active == 0)
  1142. break;
  1143. if (channel->filled_frags)
  1144. break;
  1145. spin_unlock_irqrestore (&chip->lock, flags);
  1146. set_current_state (TASK_INTERRUPTIBLE);
  1147. schedule();
  1148. spin_lock_irqsave (&chip->lock, flags);
  1149. }
  1150. set_current_state (TASK_RUNNING);
  1151. remove_wait_queue (&channel->wait, &wait);
  1152. channel->blocked = 0;
  1153. }
  1154. if (i > channel->frag_sz)
  1155. sz = channel->frag_sz;
  1156. else
  1157. sz = i;
  1158. spin_unlock_irqrestore (&chip->lock, flags);
  1159. if (copy_to_user (buffer, (void *)channel->buf+channel->swptr, sz)) {
  1160. DPRINTK ("%s: copy_to_user failedn", __FUNCTION__);
  1161. return -EFAULT;
  1162. }
  1163. spin_lock_irqsave (&chip->lock, flags);
  1164. /* Advance software pointer */
  1165. buffer += sz;
  1166. channel->filled_frags--;
  1167. channel->swptr += channel->frag_sz;
  1168. channel->swptr %= channel->buf_sz;
  1169. i -= sz;
  1170. }
  1171. spin_unlock_irqrestore (&chip->lock, flags);
  1172. return bytes - i;
  1173. }
  1174. static struct file_operations forte_dsp_fops = {
  1175. owner: THIS_MODULE,
  1176. llseek:      &no_llseek,
  1177. read:        &forte_dsp_read,
  1178. write:       &forte_dsp_write,
  1179. poll:        &forte_dsp_poll,
  1180. ioctl:       &forte_dsp_ioctl,
  1181. open:        &forte_dsp_open,
  1182. release:     &forte_dsp_release,
  1183. mmap: &forte_dsp_mmap,
  1184. };
  1185. /* Common ------------------------------------------------------------------ */
  1186. /**
  1187.  * forte_interrupt:
  1188.  */
  1189. static void
  1190. forte_interrupt (int irq, void *dev_id, struct pt_regs *regs)
  1191. {
  1192. struct forte_chip *chip = dev_id;
  1193. struct forte_channel *channel = NULL;
  1194. u16 status, count; 
  1195. status = inw (chip->iobase + FORTE_IRQ_STATUS);
  1196. /* If this is not for us, get outta here ASAP */
  1197. if ((status & (FORTE_IRQ_PLAYBACK | FORTE_IRQ_CAPTURE)) == 0)
  1198. return;
  1199. if (status & FORTE_IRQ_PLAYBACK) {
  1200. channel = &chip->play;
  1201. spin_lock (&chip->lock);
  1202. /* Declare a fragment done */
  1203. channel->filled_frags--;
  1204. /* Get # of completed bytes */
  1205. count = inw (channel->iobase + FORTE_PLY_COUNT) + 1;
  1206. channel->bytes += count;
  1207. if (count == 0) {
  1208. DPRINTK ("%s: last, filled_frags = %dn", __FUNCTION__,
  1209.  channel->filled_frags);
  1210. channel->filled_frags = 0;
  1211. forte_channel_stop (channel);
  1212. goto pack;
  1213. }
  1214. channel->nr_irqs++;
  1215. /* Flip-flop between buffer I and II */
  1216. channel->next_buf ^= 1;
  1217. /* Advance hardware pointer by fragment size and wrap around */
  1218. channel->hwptr += channel->frag_sz;
  1219. channel->hwptr %= channel->buf_sz;
  1220. /* Buffer I or buffer II BAR */
  1221.                 outl (channel->buf_handle + channel->hwptr, 
  1222.       channel->next_buf == 0 ?
  1223.       channel->iobase + FORTE_PLY_BUF1 :
  1224.       channel->iobase + FORTE_PLY_BUF2);
  1225. /* If the currently playing fragment is last, schedule stop */
  1226. if (channel->filled_frags == 1)
  1227. forte_channel_stop (channel);
  1228. pack:
  1229. /* Acknowledge interrupt */
  1230.                 outw (FORTE_IRQ_PLAYBACK, chip->iobase + FORTE_IRQ_STATUS);
  1231. spin_unlock (&chip->lock);
  1232. if (channel->blocked || channel->drain)
  1233. wake_up_interruptible (&channel->wait);
  1234. }
  1235. if (status & FORTE_IRQ_CAPTURE) {
  1236. channel = &chip->rec;
  1237. spin_lock (&chip->lock);
  1238. /* One fragment filled */
  1239. channel->filled_frags++;
  1240. /* Get # of completed bytes */
  1241. count = inw (channel->iobase + FORTE_PLY_COUNT) + 1;
  1242. if (count == 0) {
  1243. DPRINTK ("%s: last, filled_frags = %dn", __FUNCTION__,
  1244.  channel->filled_frags);
  1245. channel->filled_frags = 0;
  1246. goto rack;
  1247. }
  1248. /* Buffer I or buffer II BAR */
  1249.                 outl (channel->buf_handle + channel->hwptr, 
  1250.       channel->next_buf == 0 ?
  1251.       channel->iobase + FORTE_PLY_BUF1 :
  1252.       channel->iobase + FORTE_PLY_BUF2);
  1253. /* Flip-flop between buffer I and II */
  1254. channel->next_buf ^= 1;
  1255. /* Advance hardware pointer by fragment size and wrap around */
  1256. channel->hwptr += channel->frag_sz;
  1257. channel->hwptr %= channel->buf_sz;
  1258. /* Out of buffers */
  1259. if (channel->filled_frags == channel->frag_num - 1)
  1260. forte_channel_stop (channel);
  1261. rack:
  1262. /* Acknowledge interrupt */
  1263.                 outw (FORTE_IRQ_CAPTURE, chip->iobase + FORTE_IRQ_STATUS);
  1264. spin_unlock (&chip->lock);
  1265. if (channel->blocked)
  1266. wake_up_all (&channel->wait);
  1267. }
  1268. return;
  1269. }
  1270. /**
  1271.  * forte_proc_read:
  1272.  */
  1273. static int
  1274. forte_proc_read (char *page, char **start, off_t off, int count, 
  1275.  int *eof, void *data)
  1276. {
  1277. int i = 0, p_rate, p_chan, r_rate;
  1278. unsigned short p_reg, r_reg;
  1279. i += sprintf (page, "ForteMedia FM801 OSS Lite drivern%snn", 
  1280.       DRIVER_VERSION);
  1281. if (!forte->iobase)
  1282. return i;
  1283. p_rate = p_chan = -1;
  1284. p_reg  = inw (forte->iobase + FORTE_PLY_CTRL);
  1285. p_rate = (p_reg >> 8) & 15;
  1286. p_chan = (p_reg >> 12) & 3;
  1287.   if (p_rate >= 0 || p_rate <= 10)
  1288. p_rate = rates[p_rate];
  1289. if (p_chan >= 0 || p_chan <= 2)
  1290. p_chan = channels[p_chan];
  1291. r_rate = -1;
  1292. r_reg  = inw (forte->iobase + FORTE_CAP_CTRL);
  1293. r_rate = (r_reg >> 8) & 15;
  1294.   if (r_rate >= 0 || r_rate <= 10)
  1295. r_rate = rates[r_rate]; 
  1296. i += sprintf (page + i,
  1297.       "             Playback  Capturen"
  1298.       "FIFO empty : %-3s       %-3sn"
  1299.       "Buf1 Last  : %-3s       %-3sn"
  1300.       "Buf2 Last  : %-3s       %-3sn"
  1301.       "Started    : %-3s       %-3sn"
  1302.       "Paused     : %-3s       %-3sn"
  1303.       "Immed Stop : %-3s       %-3sn"
  1304.       "Rate       : %-5d     %-5dn"
  1305.       "Channels   : %-5d     -n"
  1306.       "16-bit     : %-3s       %-3sn"
  1307.       "Stereo     : %-3s       %-3sn",
  1308.       p_reg & 1<<0  ? "yes" : "no",
  1309.       r_reg & 1<<0  ? "yes" : "no",
  1310.       p_reg & 1<<1  ? "yes" : "no",
  1311.       r_reg & 1<<1  ? "yes" : "no",
  1312.       p_reg & 1<<2  ? "yes" : "no",
  1313.       r_reg & 1<<2  ? "yes" : "no",
  1314.       p_reg & 1<<5  ? "yes" : "no",
  1315.       r_reg & 1<<5  ? "yes" : "no",
  1316.       p_reg & 1<<6  ? "yes" : "no",
  1317.       r_reg & 1<<6  ? "yes" : "no",
  1318.       p_reg & 1<<7  ? "yes" : "no",
  1319.       r_reg & 1<<7  ? "yes" : "no",
  1320.       p_rate, r_rate,
  1321.       p_chan,
  1322.       p_reg & 1<<14 ? "yes" : "no",
  1323.       r_reg & 1<<14 ? "yes" : "no",
  1324.       p_reg & 1<<15 ? "yes" : "no",
  1325.       r_reg & 1<<15 ? "yes" : "no");
  1326. return i;
  1327. }
  1328. /**
  1329.  * forte_proc_init:
  1330.  *
  1331.  * Creates driver info entries in /proc
  1332.  */
  1333. static int __init 
  1334. forte_proc_init (void)
  1335. {
  1336. if (!proc_mkdir ("driver/forte", 0))
  1337. return -EIO;
  1338. if (!create_proc_read_entry ("driver/forte/chip", 0, 0, forte_proc_read, forte)) {
  1339. remove_proc_entry ("driver/forte", NULL);
  1340. return -EIO;
  1341. }
  1342. if (!create_proc_read_entry("driver/forte/ac97", 0, 0, ac97_read_proc, forte->ac97)) {
  1343. remove_proc_entry ("driver/forte/chip", NULL);
  1344. remove_proc_entry ("driver/forte", NULL);
  1345. return -EIO;
  1346. }
  1347. return 0;
  1348. }
  1349. /**
  1350.  * forte_proc_remove:
  1351.  *
  1352.  * Removes driver info entries in /proc
  1353.  */
  1354. static void
  1355. forte_proc_remove (void)
  1356. {
  1357. remove_proc_entry ("driver/forte/ac97", NULL);
  1358. remove_proc_entry ("driver/forte/chip", NULL);
  1359. remove_proc_entry ("driver/forte", NULL);
  1360. }
  1361. /**
  1362.  * forte_chip_init:
  1363.  * @chip: Chip instance to initialize
  1364.  *
  1365.  * Description:
  1366.  *  Resets chip, configures codec and registers the driver with
  1367.  *  the sound subsystem.
  1368.  *
  1369.  *  Press and hold Start for 8 secs, then switch on Run
  1370.  *  and hold for 4 seconds.  Let go of Start.  Numbers
  1371.  *  assume a properly oiled TWG.
  1372.  */
  1373. static int __devinit
  1374. forte_chip_init (struct forte_chip *chip)
  1375. {
  1376. u8 revision;
  1377. u16 cmdw;
  1378. struct ac97_codec *codec;
  1379. pci_read_config_byte (chip->pci_dev, PCI_REVISION_ID, &revision);
  1380. if (revision >= 0xB1) {
  1381. chip->multichannel = 1;
  1382. printk (KERN_INFO PFX "Multi-channel device detected.n");
  1383. }
  1384. /* Reset chip */
  1385. outw (FORTE_CC_CODEC_RESET | FORTE_CC_AC97_RESET, 
  1386.       chip->iobase + FORTE_CODEC_CTRL);
  1387. udelay(100);
  1388. outw (0, chip->iobase + FORTE_CODEC_CTRL);
  1389. /* Request read from AC97 */
  1390. outw (FORTE_AC97_READ | (0 << FORTE_AC97_ADDR_SHIFT), 
  1391.       chip->iobase + FORTE_AC97_CMD);
  1392. mdelay(750);
  1393. if ((inw (chip->iobase + FORTE_AC97_CMD) & (3<<8)) != (1<<8)) {
  1394. printk (KERN_INFO PFX "AC97 codec not responding");
  1395. return -EIO;
  1396. }
  1397. /* Init volume */
  1398. outw (0x0808, chip->iobase + FORTE_PCM_VOL);
  1399. outw (0x9f1f, chip->iobase + FORTE_FM_VOL);
  1400. outw (0x8808, chip->iobase + FORTE_I2S_VOL);
  1401. /* I2S control - I2S mode */
  1402. outw (0x0003, chip->iobase + FORTE_I2S_MODE);
  1403. /* Interrupt setup - unmask PLAYBACK & CAPTURE */
  1404. cmdw = inw (chip->iobase + FORTE_IRQ_MASK);
  1405. cmdw &= ~0x0003;
  1406. outw (cmdw, chip->iobase + FORTE_IRQ_MASK);
  1407. /* Interrupt clear */
  1408. outw (FORTE_IRQ_PLAYBACK|FORTE_IRQ_CAPTURE, 
  1409.       chip->iobase + FORTE_IRQ_STATUS);
  1410. /* Set up the AC97 codec */
  1411. if ((codec = kmalloc (sizeof (struct ac97_codec), GFP_KERNEL)) == NULL)
  1412. return -ENOMEM;
  1413. memset (codec, 0, sizeof (struct ac97_codec));
  1414. codec->private_data = chip;
  1415. codec->codec_read = forte_ac97_read;
  1416. codec->codec_write = forte_ac97_write;
  1417. codec->id = 0;
  1418. if (ac97_probe_codec (codec) == 0) {
  1419. printk (KERN_ERR PFX "codec probe failedn");
  1420. kfree (codec);
  1421. return -1;
  1422. }
  1423. /* Register mixer */
  1424. if ((codec->dev_mixer = 
  1425.      register_sound_mixer (&forte_mixer_fops, -1)) < 0) {
  1426. printk (KERN_ERR PFX "couldn't register mixer!n");
  1427. kfree (codec);
  1428. return -1;
  1429. }
  1430. chip->ac97 = codec;
  1431. /* Register DSP */
  1432. if ((chip->dsp = register_sound_dsp (&forte_dsp_fops, -1) ) < 0) {
  1433. printk (KERN_ERR PFX "couldn't register dsp!n");
  1434. return -1;
  1435. }
  1436. /* Register with /proc */
  1437. if (forte_proc_init()) {
  1438. printk (KERN_ERR PFX "couldn't add entries to /proc!n");
  1439. return -1;
  1440. }
  1441. return 0;
  1442. }
  1443. /**
  1444.  * forte_probe:
  1445.  * @pci_dev: PCI struct for probed device
  1446.  * @pci_id:
  1447.  *
  1448.  * Description:
  1449.  * Allocates chip instance, I/O region, and IRQ
  1450.  */
  1451. static int __init 
  1452. forte_probe (struct pci_dev *pci_dev, const struct pci_device_id *pci_id)
  1453. {
  1454. struct forte_chip *chip;
  1455. int ret = 0;
  1456. /* FIXME: Support more than one chip */
  1457. if (found++)
  1458. return -EIO;
  1459. /* Ignition */
  1460. if (pci_enable_device (pci_dev))
  1461. return -EIO;
  1462. pci_set_master (pci_dev);
  1463. /* Allocate chip instance and configure */
  1464. forte = (struct forte_chip *) 
  1465. kmalloc (sizeof (struct forte_chip), GFP_KERNEL);
  1466. chip = forte;
  1467. if (chip == NULL) {
  1468. printk (KERN_WARNING PFX "Out of memory");
  1469. return -ENOMEM;
  1470. }
  1471. memset (chip, 0, sizeof (struct forte_chip));
  1472. chip->pci_dev = pci_dev;
  1473. init_MUTEX(&chip->open_sem);
  1474. spin_lock_init (&chip->lock);
  1475. spin_lock_init (&chip->ac97_lock);
  1476. if (! request_region (pci_resource_start (pci_dev, 0),
  1477.       pci_resource_len (pci_dev, 0), DRIVER_NAME)) {
  1478. printk (KERN_WARNING PFX "Unable to reserve I/O space");
  1479. ret = -ENOMEM;
  1480. goto error;
  1481. }
  1482. chip->iobase = pci_resource_start (pci_dev, 0);
  1483. chip->irq = pci_dev->irq;
  1484. if (request_irq (chip->irq, forte_interrupt, SA_SHIRQ, DRIVER_NAME,
  1485.  chip)) {
  1486. printk (KERN_WARNING PFX "Unable to reserve IRQ");
  1487. ret = -EIO;
  1488. goto error;
  1489. }
  1490. pci_set_drvdata (pci_dev, chip);
  1491. printk (KERN_INFO PFX "FM801 chip found at 0x%04lX-0x%04lX IRQ %un", 
  1492. chip->iobase, pci_resource_end (pci_dev, 0), chip->irq);
  1493. /* Power it up */
  1494. if ((ret = forte_chip_init (chip)) == 0)
  1495. return 0;
  1496.  error:
  1497. if (chip->irq)
  1498. free_irq (chip->irq, chip);
  1499. if (chip->iobase) 
  1500. release_region (pci_resource_start (pci_dev, 0),
  1501. pci_resource_len (pci_dev, 0));
  1502. kfree (chip);
  1503. return ret;
  1504. }
  1505. /**
  1506.  * forte_remove:
  1507.  * @pci_dev: PCI device to unclaim
  1508.  *
  1509.  */
  1510. static void 
  1511. forte_remove (struct pci_dev *pci_dev)
  1512. {
  1513. struct forte_chip *chip = pci_get_drvdata (pci_dev);
  1514. if (chip == NULL)
  1515. return;
  1516. /* Turn volume down to avoid popping */
  1517. outw (0x1f1f, chip->iobase + FORTE_PCM_VOL);
  1518. outw (0x1f1f, chip->iobase + FORTE_FM_VOL);
  1519. outw (0x1f1f, chip->iobase + FORTE_I2S_VOL);
  1520. forte_proc_remove();
  1521. free_irq (chip->irq, chip);
  1522. release_region (chip->iobase, pci_resource_len (pci_dev, 0));
  1523. unregister_sound_dsp (chip->dsp);
  1524. unregister_sound_mixer (chip->ac97->dev_mixer);
  1525. kfree (chip);
  1526. printk (KERN_INFO PFX "driver releasedn");
  1527. }
  1528. static struct pci_device_id forte_pci_ids[] __devinitdata = {
  1529. { 0x1319, 0x0801, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
  1530. { 0, }
  1531. };
  1532. static struct pci_driver forte_pci_driver = {
  1533. name:        DRIVER_NAME,
  1534. id_table:    forte_pci_ids,
  1535. probe:       forte_probe,
  1536. remove:      forte_remove,
  1537. };
  1538. /**
  1539.  * forte_init_module:
  1540.  *
  1541.  */
  1542. static int __init
  1543. forte_init_module (void)
  1544. {
  1545. if (!pci_present())
  1546. return -ENODEV;
  1547. printk (KERN_INFO PFX DRIVER_VERSION "n");
  1548. if (!pci_register_driver (&forte_pci_driver)) {
  1549. pci_unregister_driver (&forte_pci_driver);
  1550. return -ENODEV;
  1551. }
  1552. return 0;
  1553. }
  1554. /**
  1555.  * forte_cleanup_module:
  1556.  *
  1557.  */
  1558. static void __exit 
  1559. forte_cleanup_module (void)
  1560. {
  1561. pci_unregister_driver (&forte_pci_driver);
  1562. }
  1563. module_init(forte_init_module);
  1564. module_exit(forte_cleanup_module);
  1565. MODULE_AUTHOR("Martin K. Petersen <mkp@mkp.net>");
  1566. MODULE_DESCRIPTION("ForteMedia FM801 OSS Driver");
  1567. MODULE_LICENSE("GPL");
  1568. MODULE_DEVICE_TABLE (pci, forte_pci_ids);