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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*****************************************************************************/
  2. /*
  3.  *      es1371.c  --  Creative Ensoniq ES1371.
  4.  *
  5.  *      Copyright (C) 1998-2001  Thomas Sailer (t.sailer@alumni.ethz.ch)
  6.  *
  7.  *      This program is free software; you can redistribute it and/or modify
  8.  *      it under the terms of the GNU General Public License as published by
  9.  *      the Free Software Foundation; either version 2 of the License, or
  10.  *      (at your option) any later version.
  11.  *
  12.  *      This program is distributed in the hope that it will be useful,
  13.  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  *      GNU General Public License for more details.
  16.  *
  17.  *      You should have received a copy of the GNU General Public License
  18.  *      along with this program; if not, write to the Free Software
  19.  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  *
  21.  * Special thanks to Ensoniq
  22.  *
  23.  *
  24.  * Module command line parameters:
  25.  *   joystick must be set to the base I/O-Port to be used for
  26.  *   the gameport. Legal values are 0x200, 0x208, 0x210 and 0x218.         
  27.  *   The gameport is mirrored eight times.
  28.  *        
  29.  *  Supported devices:
  30.  *  /dev/dsp    standard /dev/dsp device, (mostly) OSS compatible
  31.  *  /dev/mixer  standard /dev/mixer device, (mostly) OSS compatible
  32.  *  /dev/dsp1   additional DAC, like /dev/dsp, but outputs to mixer "SYNTH" setting
  33.  *  /dev/midi   simple MIDI UART interface, no ioctl
  34.  *
  35.  *  NOTE: the card does not have any FM/Wavetable synthesizer, it is supposed
  36.  *  to be done in software. That is what /dev/dac is for. By now (Q2 1998)
  37.  *  there are several MIDI to PCM (WAV) packages, one of them is timidity.
  38.  *
  39.  *  Revision history
  40.  *    04.06.1998   0.1   Initial release
  41.  *                       Mixer stuff should be overhauled; especially optional AC97 mixer bits
  42.  *                       should be detected. This results in strange behaviour of some mixer
  43.  *                       settings, like master volume and mic.
  44.  *    08.06.1998   0.2   First release using Alan Cox' soundcore instead of miscdevice
  45.  *    03.08.1998   0.3   Do not include modversions.h
  46.  *                       Now mixer behaviour can basically be selected between
  47.  *                       "OSS documented" and "OSS actual" behaviour
  48.  *    31.08.1998   0.4   Fix realplayer problems - dac.count issues
  49.  *    27.10.1998   0.5   Fix joystick support
  50.  *                       -- Oliver Neukum (c188@org.chemie.uni-muenchen.de)
  51.  *    10.12.1998   0.6   Fix drain_dac trying to wait on not yet initialized DMA
  52.  *    23.12.1998   0.7   Fix a few f_file & FMODE_ bugs
  53.  *                       Don't wake up app until there are fragsize bytes to read/write
  54.  *    06.01.1999   0.8   remove the silly SA_INTERRUPT flag.
  55.  *                       hopefully killed the egcs section type conflict
  56.  *    12.03.1999   0.9   cinfo.blocks should be reset after GETxPTR ioctl.
  57.  *                       reported by Johan Maes <joma@telindus.be>
  58.  *    22.03.1999   0.10  return EAGAIN instead of EBUSY when O_NONBLOCK
  59.  *                       read/write cannot be executed
  60.  *    07.04.1999   0.11  implemented the following ioctl's: SOUND_PCM_READ_RATE, 
  61.  *                       SOUND_PCM_READ_CHANNELS, SOUND_PCM_READ_BITS; 
  62.  *                       Alpha fixes reported by Peter Jones <pjones@redhat.com>
  63.  *                       Another Alpha fix (wait_src_ready in init routine)
  64.  *                       reported by "Ivan N. Kokshaysky" <ink@jurassic.park.msu.ru>
  65.  *                       Note: joystick address handling might still be wrong on archs
  66.  *                       other than i386
  67.  *    15.06.1999   0.12  Fix bad allocation bug.
  68.  *                       Thanks to Deti Fliegl <fliegl@in.tum.de>
  69.  *    28.06.1999   0.13  Add pci_set_master
  70.  *    03.08.1999   0.14  adapt to Linus' new __setup/__initcall
  71.  *                       added kernel command line option "es1371=joystickaddr"
  72.  *                       removed CONFIG_SOUND_ES1371_JOYPORT_BOOT kludge
  73.  *    10.08.1999   0.15  (Re)added S/PDIF module option for cards revision >= 4.
  74.  *                       Initial version by Dave Platt <dplatt@snulbug.mtview.ca.us>.
  75.  *                       module_init/__setup fixes
  76.  *    08.16.1999   0.16  Joe Cotellese <joec@ensoniq.com>
  77.  *                       Added detection for ES1371 revision ID so that we can
  78.  *                       detect the ES1373 and later parts.
  79.  *                       added AC97 #defines for readability
  80.  *                       added a /proc file system for dumping hardware state
  81.  *                       updated SRC and CODEC w/r functions to accomodate bugs
  82.  *                       in some versions of the ES137x chips.
  83.  *    31.08.1999   0.17  add spin_lock_init
  84.  *                       replaced current->state = x with set_current_state(x)
  85.  *    03.09.1999   0.18  change read semantics for MIDI to match
  86.  *                       OSS more closely; remove possible wakeup race
  87.  *    21.10.1999   0.19  Round sampling rates, requested by
  88.  *                       Kasamatsu Kenichi <t29w0267@ip.media.kyoto-u.ac.jp>
  89.  *    27.10.1999   0.20  Added SigmaTel 3D enhancement string
  90.  *                       Codec ID printing changes
  91.  *    28.10.1999   0.21  More waitqueue races fixed
  92.  *                       Joe Cotellese <joec@ensoniq.com>
  93.  *                       Changed PCI detection routine so we can more easily
  94.  *                       detect ES137x chip and derivatives.
  95.  *    05.01.2000   0.22  Should now work with rev7 boards; patch by
  96.  *                       Eric Lemar, elemar@cs.washington.edu
  97.  *    08.01.2000   0.23  Prevent some ioctl's from returning bad count values on underrun/overrun;
  98.  *                       Tim Janik's BSE (Bedevilled Sound Engine) found this
  99.  *    07.02.2000   0.24  Use pci_alloc_consistent and pci_register_driver
  100.  *    07.02.2000   0.25  Use ac97_codec
  101.  *    01.03.2000   0.26  SPDIF patch by Mikael Bouillot <mikael.bouillot@bigfoot.com>
  102.  *                       Use pci_module_init
  103.  *    21.11.2000   0.27  Initialize dma buffers in poll, otherwise poll may return a bogus mask
  104.  *    12.12.2000   0.28  More dma buffer initializations, patch from
  105.  *                       Tjeerd Mulder <tjeerd.mulder@fujitsu-siemens.com>
  106.  *    05.01.2001   0.29  Hopefully updates will not be required anymore when Creative bumps
  107.  *                       the CT5880 revision.
  108.  *                       suggested by Stephan M黮ler <smueller@chronox.de>
  109.  *    31.01.2001   0.30  Register/Unregister gameport
  110.  *                       Fix SETTRIGGER non OSS API conformity
  111.  *    14.07.2001   0.31  Add list of laptops needing amplifier control
  112.  */
  113. /*****************************************************************************/
  114.       
  115. #include <linux/version.h>
  116. #include <linux/module.h>
  117. #include <linux/string.h>
  118. #include <linux/ioport.h>
  119. #include <linux/sched.h>
  120. #include <linux/delay.h>
  121. #include <linux/sound.h>
  122. #include <linux/slab.h>
  123. #include <linux/soundcard.h>
  124. #include <linux/pci.h>
  125. #include <linux/init.h>
  126. #include <linux/poll.h>
  127. #include <linux/bitops.h>
  128. #include <linux/proc_fs.h>
  129. #include <linux/spinlock.h>
  130. #include <linux/smp_lock.h>
  131. #include <linux/ac97_codec.h>
  132. #include <linux/wrapper.h>
  133. #include <asm/io.h>
  134. #include <asm/dma.h>
  135. #include <asm/uaccess.h>
  136. #include <asm/hardirq.h>
  137. #include <linux/gameport.h>
  138. /* --------------------------------------------------------------------- */
  139. #undef OSS_DOCUMENTED_MIXER_SEMANTICS
  140. #define ES1371_DEBUG
  141. #define DBG(x) {}
  142. /*#define DBG(x) {x}*/
  143. /* --------------------------------------------------------------------- */
  144. #ifndef PCI_VENDOR_ID_ENSONIQ
  145. #define PCI_VENDOR_ID_ENSONIQ        0x1274    
  146. #endif
  147. #ifndef PCI_VENDOR_ID_ECTIVA
  148. #define PCI_VENDOR_ID_ECTIVA         0x1102
  149. #endif
  150. #ifndef PCI_DEVICE_ID_ENSONIQ_ES1371
  151. #define PCI_DEVICE_ID_ENSONIQ_ES1371 0x1371
  152. #endif
  153. #ifndef PCI_DEVICE_ID_ENSONIQ_CT5880
  154. #define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880
  155. #endif
  156. #ifndef PCI_DEVICE_ID_ECTIVA_EV1938
  157. #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938
  158. #endif
  159. /* ES1371 chip ID */
  160. /* This is a little confusing because all ES1371 compatible chips have the
  161.    same DEVICE_ID, the only thing differentiating them is the REV_ID field.
  162.    This is only significant if you want to enable features on the later parts.
  163.    Yes, I know it's stupid and why didn't we use the sub IDs?
  164. */
  165. #define ES1371REV_ES1373_A  0x04
  166. #define ES1371REV_ES1373_B  0x06
  167. #define ES1371REV_CT5880_A  0x07
  168. #define CT5880REV_CT5880_C  0x02
  169. #define CT5880REV_CT5880_D  0x03
  170. #define ES1371REV_ES1371_B  0x09
  171. #define EV1938REV_EV1938_A  0x00
  172. #define ES1371REV_ES1373_8  0x08
  173. #define ES1371_MAGIC  ((PCI_VENDOR_ID_ENSONIQ<<16)|PCI_DEVICE_ID_ENSONIQ_ES1371)
  174. #define ES1371_EXTENT             0x40
  175. #define JOY_EXTENT                8
  176. #define ES1371_REG_CONTROL        0x00
  177. #define ES1371_REG_STATUS         0x04 /* on the 5880 it is control/status */
  178. #define ES1371_REG_UART_DATA      0x08
  179. #define ES1371_REG_UART_STATUS    0x09
  180. #define ES1371_REG_UART_CONTROL   0x09
  181. #define ES1371_REG_UART_TEST      0x0a
  182. #define ES1371_REG_MEMPAGE        0x0c
  183. #define ES1371_REG_SRCONV         0x10
  184. #define ES1371_REG_CODEC          0x14
  185. #define ES1371_REG_LEGACY         0x18
  186. #define ES1371_REG_SERIAL_CONTROL 0x20
  187. #define ES1371_REG_DAC1_SCOUNT    0x24
  188. #define ES1371_REG_DAC2_SCOUNT    0x28
  189. #define ES1371_REG_ADC_SCOUNT     0x2c
  190. #define ES1371_REG_DAC1_FRAMEADR  0xc30
  191. #define ES1371_REG_DAC1_FRAMECNT  0xc34
  192. #define ES1371_REG_DAC2_FRAMEADR  0xc38
  193. #define ES1371_REG_DAC2_FRAMECNT  0xc3c
  194. #define ES1371_REG_ADC_FRAMEADR   0xd30
  195. #define ES1371_REG_ADC_FRAMECNT   0xd34
  196. #define ES1371_FMT_U8_MONO     0
  197. #define ES1371_FMT_U8_STEREO   1
  198. #define ES1371_FMT_S16_MONO    2
  199. #define ES1371_FMT_S16_STEREO  3
  200. #define ES1371_FMT_STEREO      1
  201. #define ES1371_FMT_S16         2
  202. #define ES1371_FMT_MASK        3
  203. static const unsigned sample_size[] = { 1, 2, 2, 4 };
  204. static const unsigned sample_shift[] = { 0, 1, 1, 2 };
  205. #define CTRL_RECEN_B    0x08000000  /* 1 = don't mix analog in to digital out */
  206. #define CTRL_SPDIFEN_B  0x04000000
  207. #define CTRL_JOY_SHIFT  24
  208. #define CTRL_JOY_MASK   3
  209. #define CTRL_JOY_200    0x00000000  /* joystick base address */
  210. #define CTRL_JOY_208    0x01000000
  211. #define CTRL_JOY_210    0x02000000
  212. #define CTRL_JOY_218    0x03000000
  213. #define CTRL_GPIO_IN0   0x00100000  /* general purpose inputs/outputs */
  214. #define CTRL_GPIO_IN1   0x00200000
  215. #define CTRL_GPIO_IN2   0x00400000
  216. #define CTRL_GPIO_IN3   0x00800000
  217. #define CTRL_GPIO_OUT0  0x00010000
  218. #define CTRL_GPIO_OUT1  0x00020000
  219. #define CTRL_GPIO_OUT2  0x00040000
  220. #define CTRL_GPIO_OUT3  0x00080000
  221. #define CTRL_MSFMTSEL   0x00008000  /* MPEG serial data fmt: 0 = Sony, 1 = I2S */
  222. #define CTRL_SYNCRES    0x00004000  /* AC97 warm reset */
  223. #define CTRL_ADCSTOP    0x00002000  /* stop ADC transfers */
  224. #define CTRL_PWR_INTRM  0x00001000  /* 1 = power level ints enabled */
  225. #define CTRL_M_CB       0x00000800  /* recording source: 0 = ADC, 1 = MPEG */
  226. #define CTRL_CCB_INTRM  0x00000400  /* 1 = CCB "voice" ints enabled */
  227. #define CTRL_PDLEV0     0x00000000  /* power down level */
  228. #define CTRL_PDLEV1     0x00000100
  229. #define CTRL_PDLEV2     0x00000200
  230. #define CTRL_PDLEV3     0x00000300
  231. #define CTRL_BREQ       0x00000080  /* 1 = test mode (internal mem test) */
  232. #define CTRL_DAC1_EN    0x00000040  /* enable DAC1 */
  233. #define CTRL_DAC2_EN    0x00000020  /* enable DAC2 */
  234. #define CTRL_ADC_EN     0x00000010  /* enable ADC */
  235. #define CTRL_UART_EN    0x00000008  /* enable MIDI uart */
  236. #define CTRL_JYSTK_EN   0x00000004  /* enable Joystick port */
  237. #define CTRL_XTALCLKDIS 0x00000002  /* 1 = disable crystal clock input */
  238. #define CTRL_PCICLKDIS  0x00000001  /* 1 = disable PCI clock distribution */
  239. #define STAT_INTR       0x80000000  /* wired or of all interrupt bits */
  240. #define CSTAT_5880_AC97_RST 0x20000000 /* CT5880 Reset bit */
  241. #define STAT_EN_SPDIF   0x00040000  /* enable S/PDIF circuitry */
  242. #define STAT_TS_SPDIF   0x00020000  /* test S/PDIF circuitry */
  243. #define STAT_TESTMODE   0x00010000  /* test ASIC */
  244. #define STAT_SYNC_ERR   0x00000100  /* 1 = codec sync error */
  245. #define STAT_VC         0x000000c0  /* CCB int source, 0=DAC1, 1=DAC2, 2=ADC, 3=undef */
  246. #define STAT_SH_VC      6
  247. #define STAT_MPWR       0x00000020  /* power level interrupt */
  248. #define STAT_MCCB       0x00000010  /* CCB int pending */
  249. #define STAT_UART       0x00000008  /* UART int pending */
  250. #define STAT_DAC1       0x00000004  /* DAC1 int pending */
  251. #define STAT_DAC2       0x00000002  /* DAC2 int pending */
  252. #define STAT_ADC        0x00000001  /* ADC int pending */
  253. #define USTAT_RXINT     0x80        /* UART rx int pending */
  254. #define USTAT_TXINT     0x04        /* UART tx int pending */
  255. #define USTAT_TXRDY     0x02        /* UART tx ready */
  256. #define USTAT_RXRDY     0x01        /* UART rx ready */
  257. #define UCTRL_RXINTEN   0x80        /* 1 = enable RX ints */
  258. #define UCTRL_TXINTEN   0x60        /* TX int enable field mask */
  259. #define UCTRL_ENA_TXINT 0x20        /* enable TX int */
  260. #define UCTRL_CNTRL     0x03        /* control field */
  261. #define UCTRL_CNTRL_SWR 0x03        /* software reset command */
  262. /* sample rate converter */
  263. #define SRC_OKSTATE        1
  264. #define SRC_RAMADDR_MASK   0xfe000000
  265. #define SRC_RAMADDR_SHIFT  25
  266. #define SRC_DAC1FREEZE     (1UL << 21)
  267. #define SRC_DAC2FREEZE      (1UL << 20)
  268. #define SRC_ADCFREEZE      (1UL << 19)
  269. #define SRC_WE             0x01000000  /* read/write control for SRC RAM */
  270. #define SRC_BUSY           0x00800000  /* SRC busy */
  271. #define SRC_DIS            0x00400000  /* 1 = disable SRC */
  272. #define SRC_DDAC1          0x00200000  /* 1 = disable accum update for DAC1 */
  273. #define SRC_DDAC2          0x00100000  /* 1 = disable accum update for DAC2 */
  274. #define SRC_DADC           0x00080000  /* 1 = disable accum update for ADC2 */
  275. #define SRC_CTLMASK        0x00780000
  276. #define SRC_RAMDATA_MASK   0x0000ffff
  277. #define SRC_RAMDATA_SHIFT  0
  278. #define SRCREG_ADC      0x78
  279. #define SRCREG_DAC1     0x70
  280. #define SRCREG_DAC2     0x74
  281. #define SRCREG_VOL_ADC  0x6c
  282. #define SRCREG_VOL_DAC1 0x7c
  283. #define SRCREG_VOL_DAC2 0x7e
  284. #define SRCREG_TRUNC_N     0x00
  285. #define SRCREG_INT_REGS    0x01
  286. #define SRCREG_ACCUM_FRAC  0x02
  287. #define SRCREG_VFREQ_FRAC  0x03
  288. #define CODEC_PIRD        0x00800000  /* 0 = write AC97 register */
  289. #define CODEC_PIADD_MASK  0x007f0000
  290. #define CODEC_PIADD_SHIFT 16
  291. #define CODEC_PIDAT_MASK  0x0000ffff
  292. #define CODEC_PIDAT_SHIFT 0
  293. #define CODEC_RDY         0x80000000  /* AC97 read data valid */
  294. #define CODEC_WIP         0x40000000  /* AC97 write in progress */
  295. #define CODEC_PORD        0x00800000  /* 0 = write AC97 register */
  296. #define CODEC_POADD_MASK  0x007f0000
  297. #define CODEC_POADD_SHIFT 16
  298. #define CODEC_PODAT_MASK  0x0000ffff
  299. #define CODEC_PODAT_SHIFT 0
  300. #define LEGACY_JFAST      0x80000000  /* fast joystick timing */
  301. #define LEGACY_FIRQ       0x01000000  /* force IRQ */
  302. #define SCTRL_DACTEST     0x00400000  /* 1 = DAC test, test vector generation purposes */
  303. #define SCTRL_P2ENDINC    0x00380000  /*  */
  304. #define SCTRL_SH_P2ENDINC 19
  305. #define SCTRL_P2STINC     0x00070000  /*  */
  306. #define SCTRL_SH_P2STINC  16
  307. #define SCTRL_R1LOOPSEL   0x00008000  /* 0 = loop mode */
  308. #define SCTRL_P2LOOPSEL   0x00004000  /* 0 = loop mode */
  309. #define SCTRL_P1LOOPSEL   0x00002000  /* 0 = loop mode */
  310. #define SCTRL_P2PAUSE     0x00001000  /* 1 = pause mode */
  311. #define SCTRL_P1PAUSE     0x00000800  /* 1 = pause mode */
  312. #define SCTRL_R1INTEN     0x00000400  /* enable interrupt */
  313. #define SCTRL_P2INTEN     0x00000200  /* enable interrupt */
  314. #define SCTRL_P1INTEN     0x00000100  /* enable interrupt */
  315. #define SCTRL_P1SCTRLD    0x00000080  /* reload sample count register for DAC1 */
  316. #define SCTRL_P2DACSEN    0x00000040  /* 1 = DAC2 play back last sample when disabled */
  317. #define SCTRL_R1SEB       0x00000020  /* 1 = 16bit */
  318. #define SCTRL_R1SMB       0x00000010  /* 1 = stereo */
  319. #define SCTRL_R1FMT       0x00000030  /* format mask */
  320. #define SCTRL_SH_R1FMT    4
  321. #define SCTRL_P2SEB       0x00000008  /* 1 = 16bit */
  322. #define SCTRL_P2SMB       0x00000004  /* 1 = stereo */
  323. #define SCTRL_P2FMT       0x0000000c  /* format mask */
  324. #define SCTRL_SH_P2FMT    2
  325. #define SCTRL_P1SEB       0x00000002  /* 1 = 16bit */
  326. #define SCTRL_P1SMB       0x00000001  /* 1 = stereo */
  327. #define SCTRL_P1FMT       0x00000003  /* format mask */
  328. #define SCTRL_SH_P1FMT    0
  329. /* misc stuff */
  330. #define POLL_COUNT   0x1000
  331. #define FMODE_DAC         4           /* slight misuse of mode_t */
  332. /* MIDI buffer sizes */
  333. #define MIDIINBUF  256
  334. #define MIDIOUTBUF 256
  335. #define FMODE_MIDI_SHIFT 3
  336. #define FMODE_MIDI_READ  (FMODE_READ << FMODE_MIDI_SHIFT)
  337. #define FMODE_MIDI_WRITE (FMODE_WRITE << FMODE_MIDI_SHIFT)
  338. #define ES1371_MODULE_NAME "es1371"
  339. #define PFX ES1371_MODULE_NAME ": "
  340. /* --------------------------------------------------------------------- */
  341. struct es1371_state {
  342. /* magic */
  343. unsigned int magic;
  344. /* list of es1371 devices */
  345. struct list_head devs;
  346. /* the corresponding pci_dev structure */
  347. struct pci_dev *dev;
  348. /* soundcore stuff */
  349. int dev_audio;
  350. int dev_dac;
  351. int dev_midi;
  352. /* hardware resources */
  353. unsigned long io; /* long for SPARC */
  354. unsigned int irq;
  355. /* PCI ID's */
  356. u16 vendor;
  357. u16 device;
  358.         u8 rev; /* the chip revision */
  359. /* options */
  360. int spdif_volume; /* S/PDIF output is enabled if != -1 */
  361. #ifdef ES1371_DEBUG
  362.         /* debug /proc entry */
  363. struct proc_dir_entry *ps;
  364. #endif /* ES1371_DEBUG */
  365. struct ac97_codec codec;
  366. /* wave stuff */
  367. unsigned ctrl;
  368. unsigned sctrl;
  369. unsigned dac1rate, dac2rate, adcrate;
  370. spinlock_t lock;
  371. struct semaphore open_sem;
  372. mode_t open_mode;
  373. wait_queue_head_t open_wait;
  374. struct dmabuf {
  375. void *rawbuf;
  376. dma_addr_t dmaaddr;
  377. unsigned buforder;
  378. unsigned numfrag;
  379. unsigned fragshift;
  380. unsigned hwptr, swptr;
  381. unsigned total_bytes;
  382. int count;
  383. unsigned error; /* over/underrun */
  384. wait_queue_head_t wait;
  385. /* redundant, but makes calculations easier */
  386. unsigned fragsize;
  387. unsigned dmasize;
  388. unsigned fragsamples;
  389. /* OSS stuff */
  390. unsigned mapped:1;
  391. unsigned ready:1;
  392. unsigned endcleared:1;
  393. unsigned enabled:1;
  394. unsigned ossfragshift;
  395. int ossmaxfrags;
  396. unsigned subdivision;
  397. } dma_dac1, dma_dac2, dma_adc;
  398. /* midi stuff */
  399. struct {
  400. unsigned ird, iwr, icnt;
  401. unsigned ord, owr, ocnt;
  402. wait_queue_head_t iwait;
  403. wait_queue_head_t owait;
  404. unsigned char ibuf[MIDIINBUF];
  405. unsigned char obuf[MIDIOUTBUF];
  406. } midi;
  407. struct gameport gameport;
  408. struct semaphore sem;
  409. };
  410. /* --------------------------------------------------------------------- */
  411. static LIST_HEAD(devs);
  412. /* --------------------------------------------------------------------- */
  413. static inline unsigned ld2(unsigned int x)
  414. {
  415. unsigned r = 0;
  416. if (x >= 0x10000) {
  417. x >>= 16;
  418. r += 16;
  419. }
  420. if (x >= 0x100) {
  421. x >>= 8;
  422. r += 8;
  423. }
  424. if (x >= 0x10) {
  425. x >>= 4;
  426. r += 4;
  427. }
  428. if (x >= 4) {
  429. x >>= 2;
  430. r += 2;
  431. }
  432. if (x >= 2)
  433. r++;
  434. return r;
  435. }
  436. /* --------------------------------------------------------------------- */
  437. static unsigned wait_src_ready(struct es1371_state *s)
  438. {
  439. unsigned int t, r;
  440. for (t = 0; t < POLL_COUNT; t++) {
  441. if (!((r = inl(s->io + ES1371_REG_SRCONV)) & SRC_BUSY))
  442. return r;
  443. udelay(1);
  444. }
  445. printk(KERN_DEBUG PFX "sample rate converter timeout r = 0x%08xn", r);
  446. return r;
  447. }
  448. static unsigned src_read(struct es1371_state *s, unsigned reg)
  449. {
  450.         unsigned int temp,i,orig;
  451.         /* wait for ready */
  452.         temp = wait_src_ready (s);
  453.         /* we can only access the SRC at certain times, make sure
  454.            we're allowed to before we read */
  455.            
  456.         orig = temp;
  457.         /* expose the SRC state bits */
  458.         outl ( (temp & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT) | 0x10000UL,
  459.                s->io + ES1371_REG_SRCONV);
  460.         /* now, wait for busy and the correct time to read */
  461.         temp = wait_src_ready (s);
  462.         if ( (temp & 0x00870000UL ) != ( SRC_OKSTATE << 16 )){
  463.                 /* wait for the right state */
  464.                 for (i=0; i<POLL_COUNT; i++){
  465.                         temp = inl (s->io + ES1371_REG_SRCONV);
  466.                         if ( (temp & 0x00870000UL ) == ( SRC_OKSTATE << 16 ))
  467.                                 break;
  468.                 }
  469.         }
  470.         /* hide the state bits */
  471.         outl ((orig & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT), s->io + ES1371_REG_SRCONV);
  472.         return temp;
  473.                         
  474.                 
  475. }
  476. static void src_write(struct es1371_state *s, unsigned reg, unsigned data)
  477. {
  478.       
  479. unsigned int r;
  480. r = wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC);
  481. r |= (reg << SRC_RAMADDR_SHIFT) & SRC_RAMADDR_MASK;
  482. r |= (data << SRC_RAMDATA_SHIFT) & SRC_RAMDATA_MASK;
  483. outl(r | SRC_WE, s->io + ES1371_REG_SRCONV);
  484. }
  485. /* --------------------------------------------------------------------- */
  486. /* most of the following here is black magic */
  487. static void set_adc_rate(struct es1371_state *s, unsigned rate)
  488. {
  489. unsigned long flags;
  490. unsigned int n, truncm, freq;
  491. if (rate > 48000)
  492. rate = 48000;
  493. if (rate < 4000)
  494. rate = 4000;
  495. n = rate / 3000;
  496. if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
  497. n--;
  498. truncm = (21 * n - 1) | 1;
  499.         freq = ((48000UL << 15) / rate) * n;
  500. s->adcrate = (48000UL << 15) / (freq / n);
  501. spin_lock_irqsave(&s->lock, flags);
  502. if (rate >= 24000) {
  503. if (truncm > 239)
  504. truncm = 239;
  505. src_write(s, SRCREG_ADC+SRCREG_TRUNC_N, 
  506.   (((239 - truncm) >> 1) << 9) | (n << 4));
  507. } else {
  508. if (truncm > 119)
  509. truncm = 119;
  510. src_write(s, SRCREG_ADC+SRCREG_TRUNC_N, 
  511.   0x8000 | (((119 - truncm) >> 1) << 9) | (n << 4));
  512. }
  513. src_write(s, SRCREG_ADC+SRCREG_INT_REGS, 
  514.   (src_read(s, SRCREG_ADC+SRCREG_INT_REGS) & 0x00ff) |
  515.   ((freq >> 5) & 0xfc00));
  516. src_write(s, SRCREG_ADC+SRCREG_VFREQ_FRAC, freq & 0x7fff);
  517. src_write(s, SRCREG_VOL_ADC, n << 8);
  518. src_write(s, SRCREG_VOL_ADC+1, n << 8);
  519. spin_unlock_irqrestore(&s->lock, flags);
  520. }
  521. static void set_dac1_rate(struct es1371_state *s, unsigned rate)
  522. {
  523. unsigned long flags;
  524. unsigned int freq, r;
  525. if (rate > 48000)
  526. rate = 48000;
  527. if (rate < 4000)
  528. rate = 4000;
  529.         freq = ((rate << 15) + 1500) / 3000;
  530. s->dac1rate = (freq * 3000 + 16384) >> 15;
  531. spin_lock_irqsave(&s->lock, flags);
  532. r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC)) | SRC_DDAC1;
  533. outl(r, s->io + ES1371_REG_SRCONV);
  534. src_write(s, SRCREG_DAC1+SRCREG_INT_REGS, 
  535.   (src_read(s, SRCREG_DAC1+SRCREG_INT_REGS) & 0x00ff) |
  536.   ((freq >> 5) & 0xfc00));
  537. src_write(s, SRCREG_DAC1+SRCREG_VFREQ_FRAC, freq & 0x7fff);
  538. r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC));
  539. outl(r, s->io + ES1371_REG_SRCONV);
  540. spin_unlock_irqrestore(&s->lock, flags);
  541. }
  542. static void set_dac2_rate(struct es1371_state *s, unsigned rate)
  543. {
  544. unsigned long flags;
  545. unsigned int freq, r;
  546. if (rate > 48000)
  547. rate = 48000;
  548. if (rate < 4000)
  549. rate = 4000;
  550.         freq = ((rate << 15) + 1500) / 3000;
  551. s->dac2rate = (freq * 3000 + 16384) >> 15;
  552. spin_lock_irqsave(&s->lock, flags);
  553. r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC)) | SRC_DDAC2;
  554. outl(r, s->io + ES1371_REG_SRCONV);
  555. src_write(s, SRCREG_DAC2+SRCREG_INT_REGS, 
  556.   (src_read(s, SRCREG_DAC2+SRCREG_INT_REGS) & 0x00ff) |
  557.   ((freq >> 5) & 0xfc00));
  558. src_write(s, SRCREG_DAC2+SRCREG_VFREQ_FRAC, freq & 0x7fff);
  559. r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC));
  560. outl(r, s->io + ES1371_REG_SRCONV);
  561. spin_unlock_irqrestore(&s->lock, flags);
  562. }
  563. /* --------------------------------------------------------------------- */
  564. static void __init src_init(struct es1371_state *s)
  565. {
  566.         unsigned int i;
  567.         /* before we enable or disable the SRC we need
  568.            to wait for it to become ready */
  569.         wait_src_ready(s);
  570.         outl(SRC_DIS, s->io + ES1371_REG_SRCONV);
  571.         for (i = 0; i < 0x80; i++)
  572.                 src_write(s, i, 0);
  573.         src_write(s, SRCREG_DAC1+SRCREG_TRUNC_N, 16 << 4);
  574.         src_write(s, SRCREG_DAC1+SRCREG_INT_REGS, 16 << 10);
  575.         src_write(s, SRCREG_DAC2+SRCREG_TRUNC_N, 16 << 4);
  576.         src_write(s, SRCREG_DAC2+SRCREG_INT_REGS, 16 << 10);
  577.         src_write(s, SRCREG_VOL_ADC, 1 << 12);
  578.         src_write(s, SRCREG_VOL_ADC+1, 1 << 12);
  579.         src_write(s, SRCREG_VOL_DAC1, 1 << 12);
  580.         src_write(s, SRCREG_VOL_DAC1+1, 1 << 12);
  581.         src_write(s, SRCREG_VOL_DAC2, 1 << 12);
  582.         src_write(s, SRCREG_VOL_DAC2+1, 1 << 12);
  583.         set_adc_rate(s, 22050);
  584.         set_dac1_rate(s, 22050);
  585.         set_dac2_rate(s, 22050);
  586.         /* WARNING:
  587.          * enabling the sample rate converter without properly programming
  588.          * its parameters causes the chip to lock up (the SRC busy bit will
  589.          * be stuck high, and I've found no way to rectify this other than
  590.          * power cycle)
  591.          */
  592.         wait_src_ready(s);
  593.         outl(0, s->io+ES1371_REG_SRCONV);
  594. }
  595. /* --------------------------------------------------------------------- */
  596. static void wrcodec(struct ac97_codec *codec, u8 addr, u16 data)
  597. {
  598. struct es1371_state *s = (struct es1371_state *)codec->private_data;
  599. unsigned long flags;
  600. unsigned t, x;
  601.         
  602. for (t = 0; t < POLL_COUNT; t++)
  603. if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
  604. break;
  605. spin_lock_irqsave(&s->lock, flags);
  606.         /* save the current state for later */
  607.         x = wait_src_ready(s);
  608.         /* enable SRC state data in SRC mux */
  609. outl((x & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC)) | 0x00010000,
  610.      s->io+ES1371_REG_SRCONV);
  611.         /* wait for not busy (state 0) first to avoid
  612.            transition states */
  613.         for (t=0; t<POLL_COUNT; t++){
  614.                 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
  615.                     break;
  616.                 udelay(1);
  617.         }
  618.         
  619.         /* wait for a SAFE time to write addr/data and then do it, dammit */
  620.         for (t=0; t<POLL_COUNT; t++){
  621.                 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
  622.                     break;
  623.                 udelay(1);
  624.         }
  625. outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) |
  626.      ((data << CODEC_PODAT_SHIFT) & CODEC_PODAT_MASK), s->io+ES1371_REG_CODEC);
  627. /* restore SRC reg */
  628. wait_src_ready(s);
  629. outl(x, s->io+ES1371_REG_SRCONV);
  630. spin_unlock_irqrestore(&s->lock, flags);
  631. }
  632. static u16 rdcodec(struct ac97_codec *codec, u8 addr)
  633. {
  634. struct es1371_state *s = (struct es1371_state *)codec->private_data;
  635. unsigned long flags;
  636. unsigned t, x;
  637.         /* wait for WIP to go away */
  638. for (t = 0; t < 0x1000; t++)
  639. if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
  640. break;
  641. spin_lock_irqsave(&s->lock, flags);
  642. /* save the current state for later */
  643. x = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC));
  644. /* enable SRC state data in SRC mux */
  645. outl( x | 0x00010000,
  646.               s->io+ES1371_REG_SRCONV);
  647.         /* wait for not busy (state 0) first to avoid
  648.            transition states */
  649.         for (t=0; t<POLL_COUNT; t++){
  650.                 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
  651.                     break;
  652.                 udelay(1);
  653.         }
  654.         
  655.         /* wait for a SAFE time to write addr/data and then do it, dammit */
  656.         for (t=0; t<POLL_COUNT; t++){
  657.                 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
  658.                     break;
  659.                 udelay(1);
  660.         }
  661. outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) | CODEC_PORD, s->io+ES1371_REG_CODEC);
  662. /* restore SRC reg */
  663. wait_src_ready(s);
  664. outl(x, s->io+ES1371_REG_SRCONV);
  665. spin_unlock_irqrestore(&s->lock, flags);
  666.         /* wait for WIP again */
  667. for (t = 0; t < 0x1000; t++)
  668. if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
  669. break;
  670.         
  671. /* now wait for the stinkin' data (RDY) */
  672. for (t = 0; t < POLL_COUNT; t++)
  673. if ((x = inl(s->io+ES1371_REG_CODEC)) & CODEC_RDY)
  674. break;
  675.         
  676. return ((x & CODEC_PIDAT_MASK) >> CODEC_PIDAT_SHIFT);
  677. }
  678. /* --------------------------------------------------------------------- */
  679. static inline void stop_adc(struct es1371_state *s)
  680. {
  681. unsigned long flags;
  682. spin_lock_irqsave(&s->lock, flags);
  683. s->ctrl &= ~CTRL_ADC_EN;
  684. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  685. spin_unlock_irqrestore(&s->lock, flags);
  686. }
  687. static inline void stop_dac1(struct es1371_state *s)
  688. {
  689. unsigned long flags;
  690. spin_lock_irqsave(&s->lock, flags);
  691. s->ctrl &= ~CTRL_DAC1_EN;
  692. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  693. spin_unlock_irqrestore(&s->lock, flags);
  694. }
  695. static inline void stop_dac2(struct es1371_state *s)
  696. {
  697. unsigned long flags;
  698. spin_lock_irqsave(&s->lock, flags);
  699. s->ctrl &= ~CTRL_DAC2_EN;
  700. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  701. spin_unlock_irqrestore(&s->lock, flags);
  702. }
  703. static void start_dac1(struct es1371_state *s)
  704. {
  705. unsigned long flags;
  706. unsigned fragremain, fshift;
  707. spin_lock_irqsave(&s->lock, flags);
  708. if (!(s->ctrl & CTRL_DAC1_EN) && (s->dma_dac1.mapped || s->dma_dac1.count > 0)
  709.     && s->dma_dac1.ready) {
  710. s->ctrl |= CTRL_DAC1_EN;
  711. s->sctrl = (s->sctrl & ~(SCTRL_P1LOOPSEL | SCTRL_P1PAUSE | SCTRL_P1SCTRLD)) | SCTRL_P1INTEN;
  712. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  713. fragremain = ((- s->dma_dac1.hwptr) & (s->dma_dac1.fragsize-1));
  714. fshift = sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
  715. if (fragremain < 2*fshift)
  716. fragremain = s->dma_dac1.fragsize;
  717. outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
  718. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  719. outl((s->dma_dac1.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
  720. }
  721. spin_unlock_irqrestore(&s->lock, flags);
  722. }
  723. static void start_dac2(struct es1371_state *s)
  724. {
  725. unsigned long flags;
  726. unsigned fragremain, fshift;
  727. spin_lock_irqsave(&s->lock, flags);
  728. if (!(s->ctrl & CTRL_DAC2_EN) && (s->dma_dac2.mapped || s->dma_dac2.count > 0)
  729.     && s->dma_dac2.ready) {
  730. s->ctrl |= CTRL_DAC2_EN;
  731. s->sctrl = (s->sctrl & ~(SCTRL_P2LOOPSEL | SCTRL_P2PAUSE | SCTRL_P2DACSEN | 
  732.  SCTRL_P2ENDINC | SCTRL_P2STINC)) | SCTRL_P2INTEN |
  733. (((s->sctrl & SCTRL_P2FMT) ? 2 : 1) << SCTRL_SH_P2ENDINC) | 
  734. (0 << SCTRL_SH_P2STINC);
  735. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  736. fragremain = ((- s->dma_dac2.hwptr) & (s->dma_dac2.fragsize-1));
  737. fshift = sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
  738. if (fragremain < 2*fshift)
  739. fragremain = s->dma_dac2.fragsize;
  740. outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
  741. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  742. outl((s->dma_dac2.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
  743. }
  744. spin_unlock_irqrestore(&s->lock, flags);
  745. }
  746. static void start_adc(struct es1371_state *s)
  747. {
  748. unsigned long flags;
  749. unsigned fragremain, fshift;
  750. spin_lock_irqsave(&s->lock, flags);
  751. if (!(s->ctrl & CTRL_ADC_EN) && (s->dma_adc.mapped || s->dma_adc.count < (signed)(s->dma_adc.dmasize - 2*s->dma_adc.fragsize))
  752.     && s->dma_adc.ready) {
  753. s->ctrl |= CTRL_ADC_EN;
  754. s->sctrl = (s->sctrl & ~SCTRL_R1LOOPSEL) | SCTRL_R1INTEN;
  755. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  756. fragremain = ((- s->dma_adc.hwptr) & (s->dma_adc.fragsize-1));
  757. fshift = sample_shift[(s->sctrl & SCTRL_R1FMT) >> SCTRL_SH_R1FMT];
  758. if (fragremain < 2*fshift)
  759. fragremain = s->dma_adc.fragsize;
  760. outl((fragremain >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
  761. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  762. outl((s->dma_adc.fragsize >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
  763. }
  764. spin_unlock_irqrestore(&s->lock, flags);
  765. }
  766. /* --------------------------------------------------------------------- */
  767. #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT)
  768. #define DMABUF_MINORDER 1
  769. static inline void dealloc_dmabuf(struct es1371_state *s, struct dmabuf *db)
  770. {
  771. struct page *page, *pend;
  772. if (db->rawbuf) {
  773. /* undo marking the pages as reserved */
  774. pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
  775. for (page = virt_to_page(db->rawbuf); page <= pend; page++)
  776. mem_map_unreserve(page);
  777. pci_free_consistent(s->dev, PAGE_SIZE << db->buforder, db->rawbuf, db->dmaaddr);
  778. }
  779. db->rawbuf = NULL;
  780. db->mapped = db->ready = 0;
  781. }
  782. static int prog_dmabuf(struct es1371_state *s, struct dmabuf *db, unsigned rate, unsigned fmt, unsigned reg)
  783. {
  784. int order;
  785. unsigned bytepersec;
  786. unsigned bufs;
  787. struct page *page, *pend;
  788. db->hwptr = db->swptr = db->total_bytes = db->count = db->error = db->endcleared = 0;
  789. if (!db->rawbuf) {
  790. db->ready = db->mapped = 0;
  791. for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
  792. if ((db->rawbuf = pci_alloc_consistent(s->dev, PAGE_SIZE << order, &db->dmaaddr)))
  793. break;
  794. if (!db->rawbuf)
  795. return -ENOMEM;
  796. db->buforder = order;
  797. /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
  798. pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
  799. for (page = virt_to_page(db->rawbuf); page <= pend; page++)
  800. mem_map_reserve(page);
  801. }
  802. fmt &= ES1371_FMT_MASK;
  803. bytepersec = rate << sample_shift[fmt];
  804. bufs = PAGE_SIZE << db->buforder;
  805. if (db->ossfragshift) {
  806. if ((1000 << db->ossfragshift) < bytepersec)
  807. db->fragshift = ld2(bytepersec/1000);
  808. else
  809. db->fragshift = db->ossfragshift;
  810. } else {
  811. db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
  812. if (db->fragshift < 3)
  813. db->fragshift = 3;
  814. }
  815. db->numfrag = bufs >> db->fragshift;
  816. while (db->numfrag < 4 && db->fragshift > 3) {
  817. db->fragshift--;
  818. db->numfrag = bufs >> db->fragshift;
  819. }
  820. db->fragsize = 1 << db->fragshift;
  821. if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
  822. db->numfrag = db->ossmaxfrags;
  823. db->fragsamples = db->fragsize >> sample_shift[fmt];
  824. db->dmasize = db->numfrag << db->fragshift;
  825. memset(db->rawbuf, (fmt & ES1371_FMT_S16) ? 0 : 0x80, db->dmasize);
  826. outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
  827. outl(db->dmaaddr, s->io+(reg & 0xff));
  828. outl((db->dmasize >> 2)-1, s->io+((reg + 4) & 0xff));
  829. db->enabled = 1;
  830. db->ready = 1;
  831. return 0;
  832. }
  833. static inline int prog_dmabuf_adc(struct es1371_state *s)
  834. {
  835. stop_adc(s);
  836. return prog_dmabuf(s, &s->dma_adc, s->adcrate, (s->sctrl >> SCTRL_SH_R1FMT) & ES1371_FMT_MASK, 
  837.    ES1371_REG_ADC_FRAMEADR);
  838. }
  839. static inline int prog_dmabuf_dac2(struct es1371_state *s)
  840. {
  841. stop_dac2(s);
  842. return prog_dmabuf(s, &s->dma_dac2, s->dac2rate, (s->sctrl >> SCTRL_SH_P2FMT) & ES1371_FMT_MASK, 
  843.    ES1371_REG_DAC2_FRAMEADR);
  844. }
  845. static inline int prog_dmabuf_dac1(struct es1371_state *s)
  846. {
  847. stop_dac1(s);
  848. return prog_dmabuf(s, &s->dma_dac1, s->dac1rate, (s->sctrl >> SCTRL_SH_P1FMT) & ES1371_FMT_MASK,
  849.    ES1371_REG_DAC1_FRAMEADR);
  850. }
  851. static inline unsigned get_hwptr(struct es1371_state *s, struct dmabuf *db, unsigned reg)
  852. {
  853. unsigned hwptr, diff;
  854. outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
  855. hwptr = (inl(s->io+(reg & 0xff)) >> 14) & 0x3fffc;
  856. diff = (db->dmasize + hwptr - db->hwptr) % db->dmasize;
  857. db->hwptr = hwptr;
  858. return diff;
  859. }
  860. static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
  861. {
  862. if (bptr + len > bsize) {
  863. unsigned x = bsize - bptr;
  864. memset(((char *)buf) + bptr, c, x);
  865. bptr = 0;
  866. len -= x;
  867. }
  868. memset(((char *)buf) + bptr, c, len);
  869. }
  870. /* call with spinlock held! */
  871. static void es1371_update_ptr(struct es1371_state *s)
  872. {
  873. int diff;
  874. /* update ADC pointer */
  875. if (s->ctrl & CTRL_ADC_EN) {
  876. diff = get_hwptr(s, &s->dma_adc, ES1371_REG_ADC_FRAMECNT);
  877. s->dma_adc.total_bytes += diff;
  878. s->dma_adc.count += diff;
  879. if (s->dma_adc.count >= (signed)s->dma_adc.fragsize) 
  880. wake_up(&s->dma_adc.wait);
  881. if (!s->dma_adc.mapped) {
  882. if (s->dma_adc.count > (signed)(s->dma_adc.dmasize - ((3 * s->dma_adc.fragsize) >> 1))) {
  883. s->ctrl &= ~CTRL_ADC_EN;
  884. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  885. s->dma_adc.error++;
  886. }
  887. }
  888. }
  889. /* update DAC1 pointer */
  890. if (s->ctrl & CTRL_DAC1_EN) {
  891. diff = get_hwptr(s, &s->dma_dac1, ES1371_REG_DAC1_FRAMECNT);
  892. s->dma_dac1.total_bytes += diff;
  893. if (s->dma_dac1.mapped) {
  894. s->dma_dac1.count += diff;
  895. if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
  896. wake_up(&s->dma_dac1.wait);
  897. } else {
  898. s->dma_dac1.count -= diff;
  899. if (s->dma_dac1.count <= 0) {
  900. s->ctrl &= ~CTRL_DAC1_EN;
  901. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  902. s->dma_dac1.error++;
  903. } else if (s->dma_dac1.count <= (signed)s->dma_dac1.fragsize && !s->dma_dac1.endcleared) {
  904. clear_advance(s->dma_dac1.rawbuf, s->dma_dac1.dmasize, s->dma_dac1.swptr, 
  905.       s->dma_dac1.fragsize, (s->sctrl & SCTRL_P1SEB) ? 0 : 0x80);
  906. s->dma_dac1.endcleared = 1;
  907. }
  908. if (s->dma_dac1.count + (signed)s->dma_dac1.fragsize <= (signed)s->dma_dac1.dmasize)
  909. wake_up(&s->dma_dac1.wait);
  910. }
  911. }
  912. /* update DAC2 pointer */
  913. if (s->ctrl & CTRL_DAC2_EN) {
  914. diff = get_hwptr(s, &s->dma_dac2, ES1371_REG_DAC2_FRAMECNT);
  915. s->dma_dac2.total_bytes += diff;
  916. if (s->dma_dac2.mapped) {
  917. s->dma_dac2.count += diff;
  918. if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize)
  919. wake_up(&s->dma_dac2.wait);
  920. } else {
  921. s->dma_dac2.count -= diff;
  922. if (s->dma_dac2.count <= 0) {
  923. s->ctrl &= ~CTRL_DAC2_EN;
  924. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  925. s->dma_dac2.error++;
  926. } else if (s->dma_dac2.count <= (signed)s->dma_dac2.fragsize && !s->dma_dac2.endcleared) {
  927. clear_advance(s->dma_dac2.rawbuf, s->dma_dac2.dmasize, s->dma_dac2.swptr, 
  928.       s->dma_dac2.fragsize, (s->sctrl & SCTRL_P2SEB) ? 0 : 0x80);
  929. s->dma_dac2.endcleared = 1;
  930. }
  931. if (s->dma_dac2.count + (signed)s->dma_dac2.fragsize <= (signed)s->dma_dac2.dmasize)
  932. wake_up(&s->dma_dac2.wait);
  933. }
  934. }
  935. }
  936. /* hold spinlock for the following! */
  937. static void es1371_handle_midi(struct es1371_state *s)
  938. {
  939. unsigned char ch;
  940. int wake;
  941. if (!(s->ctrl & CTRL_UART_EN))
  942. return;
  943. wake = 0;
  944. while (inb(s->io+ES1371_REG_UART_STATUS) & USTAT_RXRDY) {
  945. ch = inb(s->io+ES1371_REG_UART_DATA);
  946. if (s->midi.icnt < MIDIINBUF) {
  947. s->midi.ibuf[s->midi.iwr] = ch;
  948. s->midi.iwr = (s->midi.iwr + 1) % MIDIINBUF;
  949. s->midi.icnt++;
  950. }
  951. wake = 1;
  952. }
  953. if (wake)
  954. wake_up(&s->midi.iwait);
  955. wake = 0;
  956. while ((inb(s->io+ES1371_REG_UART_STATUS) & USTAT_TXRDY) && s->midi.ocnt > 0) {
  957. outb(s->midi.obuf[s->midi.ord], s->io+ES1371_REG_UART_DATA);
  958. s->midi.ord = (s->midi.ord + 1) % MIDIOUTBUF;
  959. s->midi.ocnt--;
  960. if (s->midi.ocnt < MIDIOUTBUF-16)
  961. wake = 1;
  962. }
  963. if (wake)
  964. wake_up(&s->midi.owait);
  965. outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1371_REG_UART_CONTROL);
  966. }
  967. static void es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  968. {
  969.         struct es1371_state *s = (struct es1371_state *)dev_id;
  970. unsigned int intsrc, sctl;
  971. /* fastpath out, to ease interrupt sharing */
  972. intsrc = inl(s->io+ES1371_REG_STATUS);
  973. if (!(intsrc & 0x80000000))
  974. return;
  975. spin_lock(&s->lock);
  976. /* clear audio interrupts first */
  977. sctl = s->sctrl;
  978. if (intsrc & STAT_ADC)
  979. sctl &= ~SCTRL_R1INTEN;
  980. if (intsrc & STAT_DAC1)
  981. sctl &= ~SCTRL_P1INTEN;
  982. if (intsrc & STAT_DAC2)
  983. sctl &= ~SCTRL_P2INTEN;
  984. outl(sctl, s->io+ES1371_REG_SERIAL_CONTROL);
  985. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  986. es1371_update_ptr(s);
  987. es1371_handle_midi(s);
  988. spin_unlock(&s->lock);
  989. }
  990. /* --------------------------------------------------------------------- */
  991. static const char invalid_magic[] = KERN_CRIT PFX "invalid magic valuen";
  992. #define VALIDATE_STATE(s)                         
  993. ({                                                
  994. if (!(s) || (s)->magic != ES1371_MAGIC) { 
  995. printk(invalid_magic);            
  996. return -ENXIO;                    
  997. }                                         
  998. })
  999. /* --------------------------------------------------------------------- */
  1000. /* Conversion table for S/PDIF PCM volume emulation through the SRC */
  1001. /* dB-linear table of DAC vol values; -0dB to -46.5dB with mute */
  1002. static const unsigned short DACVolTable[101] =
  1003. {
  1004. 0x1000, 0x0f2a, 0x0e60, 0x0da0, 0x0cea, 0x0c3e, 0x0b9a, 0x0aff,
  1005. 0x0a6d, 0x09e1, 0x095e, 0x08e1, 0x086a, 0x07fa, 0x078f, 0x072a,
  1006. 0x06cb, 0x0670, 0x061a, 0x05c9, 0x057b, 0x0532, 0x04ed, 0x04ab,
  1007. 0x046d, 0x0432, 0x03fa, 0x03c5, 0x0392, 0x0363, 0x0335, 0x030b,
  1008. 0x02e2, 0x02bc, 0x0297, 0x0275, 0x0254, 0x0235, 0x0217, 0x01fb,
  1009. 0x01e1, 0x01c8, 0x01b0, 0x0199, 0x0184, 0x0170, 0x015d, 0x014b,
  1010. 0x0139, 0x0129, 0x0119, 0x010b, 0x00fd, 0x00f0, 0x00e3, 0x00d7,
  1011. 0x00cc, 0x00c1, 0x00b7, 0x00ae, 0x00a5, 0x009c, 0x0094, 0x008c,
  1012. 0x0085, 0x007e, 0x0077, 0x0071, 0x006b, 0x0066, 0x0060, 0x005b,
  1013. 0x0057, 0x0052, 0x004e, 0x004a, 0x0046, 0x0042, 0x003f, 0x003c,
  1014. 0x0038, 0x0036, 0x0033, 0x0030, 0x002e, 0x002b, 0x0029, 0x0027,
  1015. 0x0025, 0x0023, 0x0021, 0x001f, 0x001e, 0x001c, 0x001b, 0x0019,
  1016. 0x0018, 0x0017, 0x0016, 0x0014, 0x0000
  1017. };
  1018. /*
  1019.  * when we are in S/PDIF mode, we want to disable any analog output so
  1020.  * we filter the mixer ioctls 
  1021.  */
  1022. static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned long arg)
  1023. {
  1024. struct es1371_state *s = (struct es1371_state *)codec->private_data;
  1025. int val;
  1026. unsigned long flags;
  1027. unsigned int left, right;
  1028. VALIDATE_STATE(s);
  1029. /* filter mixer ioctls to catch PCM and MASTER volume when in S/PDIF mode */
  1030. if (s->spdif_volume == -1)
  1031. return codec->mixer_ioctl(codec, cmd, arg);
  1032. switch (cmd) {
  1033. case SOUND_MIXER_WRITE_VOLUME:
  1034. return 0;
  1035. case SOUND_MIXER_WRITE_PCM:   /* use SRC for PCM volume */
  1036. if (get_user(val, (int *)arg))
  1037. return -EFAULT;
  1038. right = ((val >> 8)  & 0xff);
  1039. left = (val  & 0xff);
  1040. if (right > 100)
  1041. right = 100;
  1042. if (left > 100)
  1043. left = 100;
  1044. s->spdif_volume = (right << 8) | left;
  1045. spin_lock_irqsave(&s->lock, flags);
  1046. src_write(s, SRCREG_VOL_DAC2, DACVolTable[100 - left]);
  1047. src_write(s, SRCREG_VOL_DAC2+1, DACVolTable[100 - right]);
  1048. spin_unlock_irqrestore(&s->lock, flags);
  1049. return 0;
  1050. case SOUND_MIXER_READ_PCM:
  1051. return put_user(s->spdif_volume, (int *)arg);
  1052. }
  1053. return codec->mixer_ioctl(codec, cmd, arg);
  1054. }
  1055. /* --------------------------------------------------------------------- */
  1056. /*
  1057.  * AC97 Mixer Register to Connections mapping of the Concert 97 board
  1058.  *
  1059.  * AC97_MASTER_VOL_STEREO   Line Out
  1060.  * AC97_MASTER_VOL_MONO     TAD Output
  1061.  * AC97_PCBEEP_VOL          none
  1062.  * AC97_PHONE_VOL           TAD Input (mono)
  1063.  * AC97_MIC_VOL             MIC Input (mono)
  1064.  * AC97_LINEIN_VOL          Line Input (stereo)
  1065.  * AC97_CD_VOL              CD Input (stereo)
  1066.  * AC97_VIDEO_VOL           none
  1067.  * AC97_AUX_VOL             Aux Input (stereo)
  1068.  * AC97_PCMOUT_VOL          Wave Output (stereo)
  1069.  */
  1070. static int es1371_open_mixdev(struct inode *inode, struct file *file)
  1071. {
  1072. int minor = MINOR(inode->i_rdev);
  1073. struct list_head *list;
  1074. struct es1371_state *s;
  1075. for (list = devs.next; ; list = list->next) {
  1076. if (list == &devs)
  1077. return -ENODEV;
  1078. s = list_entry(list, struct es1371_state, devs);
  1079. if (s->codec.dev_mixer == minor)
  1080. break;
  1081. }
  1082.         VALIDATE_STATE(s);
  1083. file->private_data = s;
  1084. return 0;
  1085. }
  1086. static int es1371_release_mixdev(struct inode *inode, struct file *file)
  1087. {
  1088. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1089. VALIDATE_STATE(s);
  1090. return 0;
  1091. }
  1092. static int es1371_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
  1093. {
  1094. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1095. struct ac97_codec *codec = &s->codec;
  1096. return mixdev_ioctl(codec, cmd, arg);
  1097. }
  1098. static /*const*/ struct file_operations es1371_mixer_fops = {
  1099. owner: THIS_MODULE,
  1100. llseek: no_llseek,
  1101. ioctl: es1371_ioctl_mixdev,
  1102. open: es1371_open_mixdev,
  1103. release: es1371_release_mixdev,
  1104. };
  1105. /* --------------------------------------------------------------------- */
  1106. static int drain_dac1(struct es1371_state *s, int nonblock)
  1107. {
  1108. DECLARE_WAITQUEUE(wait, current);
  1109. unsigned long flags;
  1110. int count, tmo;
  1111. if (s->dma_dac1.mapped || !s->dma_dac1.ready)
  1112. return 0;
  1113.         add_wait_queue(&s->dma_dac1.wait, &wait);
  1114.         for (;;) {
  1115. __set_current_state(TASK_INTERRUPTIBLE);
  1116.                 spin_lock_irqsave(&s->lock, flags);
  1117. count = s->dma_dac1.count;
  1118.                 spin_unlock_irqrestore(&s->lock, flags);
  1119. if (count <= 0)
  1120. break;
  1121. if (signal_pending(current))
  1122.                         break;
  1123.                 if (nonblock) {
  1124.                         remove_wait_queue(&s->dma_dac1.wait, &wait);
  1125.                         set_current_state(TASK_RUNNING);
  1126.                         return -EBUSY;
  1127.                 }
  1128. tmo = 3 * HZ * (count + s->dma_dac1.fragsize) / 2 / s->dac1rate;
  1129. tmo >>= sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
  1130. if (!schedule_timeout(tmo + 1))
  1131. DBG(printk(KERN_DEBUG PFX "dac1 dma timed out??n");)
  1132.         }
  1133.         remove_wait_queue(&s->dma_dac1.wait, &wait);
  1134.         set_current_state(TASK_RUNNING);
  1135.         if (signal_pending(current))
  1136.                 return -ERESTARTSYS;
  1137.         return 0;
  1138. }
  1139. static int drain_dac2(struct es1371_state *s, int nonblock)
  1140. {
  1141. DECLARE_WAITQUEUE(wait, current);
  1142. unsigned long flags;
  1143. int count, tmo;
  1144. if (s->dma_dac2.mapped || !s->dma_dac2.ready)
  1145. return 0;
  1146.         add_wait_queue(&s->dma_dac2.wait, &wait);
  1147.         for (;;) {
  1148. __set_current_state(TASK_UNINTERRUPTIBLE);
  1149.                 spin_lock_irqsave(&s->lock, flags);
  1150. count = s->dma_dac2.count;
  1151.                 spin_unlock_irqrestore(&s->lock, flags);
  1152. if (count <= 0)
  1153. break;
  1154. if (signal_pending(current))
  1155.                         break;
  1156.                 if (nonblock) {
  1157.                         remove_wait_queue(&s->dma_dac2.wait, &wait);
  1158.                         set_current_state(TASK_RUNNING);
  1159.                         return -EBUSY;
  1160.                 }
  1161. tmo = 3 * HZ * (count + s->dma_dac2.fragsize) / 2 / s->dac2rate;
  1162. tmo >>= sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
  1163. if (!schedule_timeout(tmo + 1))
  1164. DBG(printk(KERN_DEBUG PFX "dac2 dma timed out??n");)
  1165.         }
  1166.         remove_wait_queue(&s->dma_dac2.wait, &wait);
  1167.         set_current_state(TASK_RUNNING);
  1168.         if (signal_pending(current))
  1169.                 return -ERESTARTSYS;
  1170.         return 0;
  1171. }
  1172. /* --------------------------------------------------------------------- */
  1173. static ssize_t es1371_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
  1174. {
  1175. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1176. DECLARE_WAITQUEUE(wait, current);
  1177. ssize_t ret = 0;
  1178. unsigned long flags;
  1179. unsigned swptr;
  1180. int cnt;
  1181. VALIDATE_STATE(s);
  1182. if (ppos != &file->f_pos)
  1183. return -ESPIPE;
  1184. if (s->dma_adc.mapped)
  1185. return -ENXIO;
  1186. if (!access_ok(VERIFY_WRITE, buffer, count))
  1187. return -EFAULT;
  1188. down(&s->sem);
  1189. if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
  1190. goto out2;
  1191. add_wait_queue(&s->dma_adc.wait, &wait);
  1192. while (count > 0) {
  1193. spin_lock_irqsave(&s->lock, flags);
  1194. swptr = s->dma_adc.swptr;
  1195. cnt = s->dma_adc.dmasize-swptr;
  1196. if (s->dma_adc.count < cnt)
  1197. cnt = s->dma_adc.count;
  1198. if (cnt <= 0)
  1199. __set_current_state(TASK_INTERRUPTIBLE);
  1200. spin_unlock_irqrestore(&s->lock, flags);
  1201. if (cnt > count)
  1202. cnt = count;
  1203. if (cnt <= 0) {
  1204. if (s->dma_adc.enabled)
  1205. start_adc(s);
  1206. if (file->f_flags & O_NONBLOCK) {
  1207. if (!ret)
  1208. ret = -EAGAIN;
  1209. goto out;
  1210. }
  1211. up(&s->sem);
  1212. schedule();
  1213. if (signal_pending(current)) {
  1214. if (!ret)
  1215. ret = -ERESTARTSYS;
  1216. goto out2;
  1217. }
  1218. down(&s->sem);
  1219. if (s->dma_adc.mapped)
  1220. {
  1221. ret = -ENXIO;
  1222. goto out;
  1223. }
  1224. continue;
  1225. }
  1226. if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) {
  1227. if (!ret)
  1228. ret = -EFAULT;
  1229. goto out;
  1230. }
  1231. swptr = (swptr + cnt) % s->dma_adc.dmasize;
  1232. spin_lock_irqsave(&s->lock, flags);
  1233. s->dma_adc.swptr = swptr;
  1234. s->dma_adc.count -= cnt;
  1235. spin_unlock_irqrestore(&s->lock, flags);
  1236. count -= cnt;
  1237. buffer += cnt;
  1238. ret += cnt;
  1239. if (s->dma_adc.enabled)
  1240. start_adc(s);
  1241. }
  1242. out:
  1243. up(&s->sem);
  1244. out2:
  1245. remove_wait_queue(&s->dma_adc.wait, &wait);
  1246. set_current_state(TASK_RUNNING);
  1247. return ret;
  1248. }
  1249. static ssize_t es1371_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
  1250. {
  1251. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1252. DECLARE_WAITQUEUE(wait, current);
  1253. ssize_t ret;
  1254. unsigned long flags;
  1255. unsigned swptr;
  1256. int cnt;
  1257. VALIDATE_STATE(s);
  1258. if (ppos != &file->f_pos)
  1259. return -ESPIPE;
  1260. if (s->dma_dac2.mapped)
  1261. return -ENXIO;
  1262. if (!access_ok(VERIFY_READ, buffer, count))
  1263. return -EFAULT;
  1264. down(&s->sem);
  1265. if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
  1266. goto out3;
  1267. ret = 0;
  1268. add_wait_queue(&s->dma_dac2.wait, &wait);
  1269. while (count > 0) {
  1270. spin_lock_irqsave(&s->lock, flags);
  1271. if (s->dma_dac2.count < 0) {
  1272. s->dma_dac2.count = 0;
  1273. s->dma_dac2.swptr = s->dma_dac2.hwptr;
  1274. }
  1275. swptr = s->dma_dac2.swptr;
  1276. cnt = s->dma_dac2.dmasize-swptr;
  1277. if (s->dma_dac2.count + cnt > s->dma_dac2.dmasize)
  1278. cnt = s->dma_dac2.dmasize - s->dma_dac2.count;
  1279. if (cnt <= 0)
  1280. __set_current_state(TASK_INTERRUPTIBLE);
  1281. spin_unlock_irqrestore(&s->lock, flags);
  1282. if (cnt > count)
  1283. cnt = count;
  1284. if (cnt <= 0) {
  1285. if (s->dma_dac2.enabled)
  1286. start_dac2(s);
  1287. if (file->f_flags & O_NONBLOCK) {
  1288. if (!ret)
  1289. ret = -EAGAIN;
  1290. goto out;
  1291. }
  1292. up(&s->sem);
  1293. schedule();
  1294. if (signal_pending(current)) {
  1295. if (!ret)
  1296. ret = -ERESTARTSYS;
  1297. goto out2;
  1298. }
  1299. down(&s->sem);
  1300. if (s->dma_dac2.mapped)
  1301. {
  1302. ret = -ENXIO;
  1303. goto out;
  1304. }
  1305. continue;
  1306. }
  1307. if (copy_from_user(s->dma_dac2.rawbuf + swptr, buffer, cnt)) {
  1308. if (!ret)
  1309. ret = -EFAULT;
  1310. goto out;
  1311. }
  1312. swptr = (swptr + cnt) % s->dma_dac2.dmasize;
  1313. spin_lock_irqsave(&s->lock, flags);
  1314. s->dma_dac2.swptr = swptr;
  1315. s->dma_dac2.count += cnt;
  1316. s->dma_dac2.endcleared = 0;
  1317. spin_unlock_irqrestore(&s->lock, flags);
  1318. count -= cnt;
  1319. buffer += cnt;
  1320. ret += cnt;
  1321. if (s->dma_dac2.enabled)
  1322. start_dac2(s);
  1323. }
  1324. out:
  1325. up(&s->sem);
  1326. out2:
  1327. remove_wait_queue(&s->dma_dac2.wait, &wait);
  1328. out3:
  1329. set_current_state(TASK_RUNNING);
  1330. return ret;
  1331. }
  1332. /* No kernel lock - we have our own spinlock */
  1333. static unsigned int es1371_poll(struct file *file, struct poll_table_struct *wait)
  1334. {
  1335. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1336. unsigned long flags;
  1337. unsigned int mask = 0;
  1338. VALIDATE_STATE(s);
  1339. if (file->f_mode & FMODE_WRITE) {
  1340. if (!s->dma_dac2.ready && prog_dmabuf_dac2(s))
  1341. return 0;
  1342. poll_wait(file, &s->dma_dac2.wait, wait);
  1343. }
  1344. if (file->f_mode & FMODE_READ) {
  1345. if (!s->dma_adc.ready && prog_dmabuf_adc(s))
  1346. return 0;
  1347. poll_wait(file, &s->dma_adc.wait, wait);
  1348. }
  1349. spin_lock_irqsave(&s->lock, flags);
  1350. es1371_update_ptr(s);
  1351. if (file->f_mode & FMODE_READ) {
  1352. if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
  1353. mask |= POLLIN | POLLRDNORM;
  1354. }
  1355. if (file->f_mode & FMODE_WRITE) {
  1356. if (s->dma_dac2.mapped) {
  1357. if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize) 
  1358. mask |= POLLOUT | POLLWRNORM;
  1359. } else {
  1360. if ((signed)s->dma_dac2.dmasize >= s->dma_dac2.count + (signed)s->dma_dac2.fragsize)
  1361. mask |= POLLOUT | POLLWRNORM;
  1362. }
  1363. }
  1364. spin_unlock_irqrestore(&s->lock, flags);
  1365. return mask;
  1366. }
  1367. static int es1371_mmap(struct file *file, struct vm_area_struct *vma)
  1368. {
  1369. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1370. struct dmabuf *db;
  1371. int ret = 0;
  1372. unsigned long size;
  1373. VALIDATE_STATE(s);
  1374. lock_kernel();
  1375. down(&s->sem);
  1376. if (vma->vm_flags & VM_WRITE) {
  1377. if ((ret = prog_dmabuf_dac2(s)) != 0) {
  1378. goto out;
  1379. }
  1380. db = &s->dma_dac2;
  1381. } else if (vma->vm_flags & VM_READ) {
  1382. if ((ret = prog_dmabuf_adc(s)) != 0) {
  1383. goto out;
  1384. }
  1385. db = &s->dma_adc;
  1386. } else {
  1387. ret = -EINVAL;
  1388. goto out;
  1389. }
  1390. if (vma->vm_pgoff != 0) {
  1391. ret = -EINVAL;
  1392. goto out;
  1393. }
  1394. size = vma->vm_end - vma->vm_start;
  1395. if (size > (PAGE_SIZE << db->buforder)) {
  1396. ret = -EINVAL;
  1397. goto out;
  1398. }
  1399. if (remap_page_range(vma->vm_start, virt_to_phys(db->rawbuf), size, vma->vm_page_prot)) {
  1400. ret = -EAGAIN;
  1401. goto out;
  1402. }
  1403. db->mapped = 1;
  1404. out:
  1405. up(&s->sem);
  1406. unlock_kernel();
  1407. return ret;
  1408. }
  1409. static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
  1410. {
  1411. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1412. unsigned long flags;
  1413.         audio_buf_info abinfo;
  1414.         count_info cinfo;
  1415. int count;
  1416. int val, mapped, ret;
  1417. VALIDATE_STATE(s);
  1418.         mapped = ((file->f_mode & FMODE_WRITE) && s->dma_dac2.mapped) ||
  1419. ((file->f_mode & FMODE_READ) && s->dma_adc.mapped);
  1420. switch (cmd) {
  1421. case OSS_GETVERSION:
  1422. return put_user(SOUND_VERSION, (int *)arg);
  1423. case SNDCTL_DSP_SYNC:
  1424. if (file->f_mode & FMODE_WRITE)
  1425. return drain_dac2(s, 0/*file->f_flags & O_NONBLOCK*/);
  1426. return 0;
  1427. case SNDCTL_DSP_SETDUPLEX:
  1428. return 0;
  1429. case SNDCTL_DSP_GETCAPS:
  1430. return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
  1431.         case SNDCTL_DSP_RESET:
  1432. if (file->f_mode & FMODE_WRITE) {
  1433. stop_dac2(s);
  1434. synchronize_irq();
  1435. s->dma_dac2.swptr = s->dma_dac2.hwptr = s->dma_dac2.count = s->dma_dac2.total_bytes = 0;
  1436. }
  1437. if (file->f_mode & FMODE_READ) {
  1438. stop_adc(s);
  1439. synchronize_irq();
  1440. s->dma_adc.swptr = s->dma_adc.hwptr = s->dma_adc.count = s->dma_adc.total_bytes = 0;
  1441. }
  1442. return 0;
  1443.         case SNDCTL_DSP_SPEED:
  1444.                 if (get_user(val, (int *)arg))
  1445. return -EFAULT;
  1446. if (val >= 0) {
  1447. if (file->f_mode & FMODE_READ) {
  1448. stop_adc(s);
  1449. s->dma_adc.ready = 0;
  1450. set_adc_rate(s, val);
  1451. }
  1452. if (file->f_mode & FMODE_WRITE) {
  1453. stop_dac2(s);
  1454. s->dma_dac2.ready = 0;
  1455. set_dac2_rate(s, val);
  1456. }
  1457. }
  1458. return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, (int *)arg);
  1459.         case SNDCTL_DSP_STEREO:
  1460. if (get_user(val, (int *)arg))
  1461. return -EFAULT;
  1462. if (file->f_mode & FMODE_READ) {
  1463. stop_adc(s);
  1464. s->dma_adc.ready = 0;
  1465. spin_lock_irqsave(&s->lock, flags);
  1466. if (val)
  1467. s->sctrl |= SCTRL_R1SMB;
  1468. else
  1469. s->sctrl &= ~SCTRL_R1SMB;
  1470. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1471. spin_unlock_irqrestore(&s->lock, flags);
  1472. }
  1473. if (file->f_mode & FMODE_WRITE) {
  1474. stop_dac2(s);
  1475. s->dma_dac2.ready = 0;
  1476. spin_lock_irqsave(&s->lock, flags);
  1477. if (val)
  1478. s->sctrl |= SCTRL_P2SMB;
  1479. else
  1480. s->sctrl &= ~SCTRL_P2SMB;
  1481. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1482. spin_unlock_irqrestore(&s->lock, flags);
  1483.                 }
  1484. return 0;
  1485.         case SNDCTL_DSP_CHANNELS:
  1486.                 if (get_user(val, (int *)arg))
  1487. return -EFAULT;
  1488. if (val != 0) {
  1489. if (file->f_mode & FMODE_READ) {
  1490. stop_adc(s);
  1491. s->dma_adc.ready = 0;
  1492. spin_lock_irqsave(&s->lock, flags);
  1493. if (val >= 2)
  1494. s->sctrl |= SCTRL_R1SMB;
  1495. else
  1496. s->sctrl &= ~SCTRL_R1SMB;
  1497. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1498. spin_unlock_irqrestore(&s->lock, flags);
  1499. }
  1500. if (file->f_mode & FMODE_WRITE) {
  1501. stop_dac2(s);
  1502. s->dma_dac2.ready = 0;
  1503. spin_lock_irqsave(&s->lock, flags);
  1504. if (val >= 2)
  1505. s->sctrl |= SCTRL_P2SMB;
  1506. else
  1507. s->sctrl &= ~SCTRL_P2SMB;
  1508. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1509. spin_unlock_irqrestore(&s->lock, flags);
  1510. }
  1511. }
  1512. return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, (int *)arg);
  1513. case SNDCTL_DSP_GETFMTS: /* Returns a mask */
  1514.                 return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
  1515. case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
  1516. if (get_user(val, (int *)arg))
  1517. return -EFAULT;
  1518. if (val != AFMT_QUERY) {
  1519. if (file->f_mode & FMODE_READ) {
  1520. stop_adc(s);
  1521. s->dma_adc.ready = 0;
  1522. spin_lock_irqsave(&s->lock, flags);
  1523. if (val == AFMT_S16_LE)
  1524. s->sctrl |= SCTRL_R1SEB;
  1525. else
  1526. s->sctrl &= ~SCTRL_R1SEB;
  1527. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1528. spin_unlock_irqrestore(&s->lock, flags);
  1529. }
  1530. if (file->f_mode & FMODE_WRITE) {
  1531. stop_dac2(s);
  1532. s->dma_dac2.ready = 0;
  1533. spin_lock_irqsave(&s->lock, flags);
  1534. if (val == AFMT_S16_LE)
  1535. s->sctrl |= SCTRL_P2SEB;
  1536. else
  1537. s->sctrl &= ~SCTRL_P2SEB;
  1538. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1539. spin_unlock_irqrestore(&s->lock, flags);
  1540. }
  1541. }
  1542. return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ? 
  1543. AFMT_S16_LE : AFMT_U8, (int *)arg);
  1544. case SNDCTL_DSP_POST:
  1545.                 return 0;
  1546.         case SNDCTL_DSP_GETTRIGGER:
  1547. val = 0;
  1548. if (file->f_mode & FMODE_READ && s->ctrl & CTRL_ADC_EN) 
  1549. val |= PCM_ENABLE_INPUT;
  1550. if (file->f_mode & FMODE_WRITE && s->ctrl & CTRL_DAC2_EN) 
  1551. val |= PCM_ENABLE_OUTPUT;
  1552. return put_user(val, (int *)arg);
  1553. case SNDCTL_DSP_SETTRIGGER:
  1554. if (get_user(val, (int *)arg))
  1555. return -EFAULT;
  1556. if (file->f_mode & FMODE_READ) {
  1557. if (val & PCM_ENABLE_INPUT) {
  1558. if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
  1559. return ret;
  1560. s->dma_adc.enabled = 1;
  1561. start_adc(s);
  1562. } else {
  1563. s->dma_adc.enabled = 0;
  1564. stop_adc(s);
  1565. }
  1566. }
  1567. if (file->f_mode & FMODE_WRITE) {
  1568. if (val & PCM_ENABLE_OUTPUT) {
  1569. if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
  1570. return ret;
  1571. s->dma_dac2.enabled = 1;
  1572. start_dac2(s);
  1573. } else {
  1574. s->dma_dac2.enabled = 0;
  1575. stop_dac2(s);
  1576. }
  1577. }
  1578. return 0;
  1579. case SNDCTL_DSP_GETOSPACE:
  1580. if (!(file->f_mode & FMODE_WRITE))
  1581. return -EINVAL;
  1582. if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
  1583. return val;
  1584. spin_lock_irqsave(&s->lock, flags);
  1585. es1371_update_ptr(s);
  1586. abinfo.fragsize = s->dma_dac2.fragsize;
  1587. count = s->dma_dac2.count;
  1588. if (count < 0)
  1589. count = 0;
  1590.                 abinfo.bytes = s->dma_dac2.dmasize - count;
  1591.                 abinfo.fragstotal = s->dma_dac2.numfrag;
  1592.                 abinfo.fragments = abinfo.bytes >> s->dma_dac2.fragshift;      
  1593. spin_unlock_irqrestore(&s->lock, flags);
  1594. return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
  1595. case SNDCTL_DSP_GETISPACE:
  1596. if (!(file->f_mode & FMODE_READ))
  1597. return -EINVAL;
  1598. if (!s->dma_adc.ready && (val = prog_dmabuf_adc(s)) != 0)
  1599. return val;
  1600. spin_lock_irqsave(&s->lock, flags);
  1601. es1371_update_ptr(s);
  1602. abinfo.fragsize = s->dma_adc.fragsize;
  1603. count = s->dma_adc.count;
  1604. if (count < 0)
  1605. count = 0;
  1606.                 abinfo.bytes = count;
  1607.                 abinfo.fragstotal = s->dma_adc.numfrag;
  1608.                 abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;      
  1609. spin_unlock_irqrestore(&s->lock, flags);
  1610. return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
  1611.         case SNDCTL_DSP_NONBLOCK:
  1612.                 file->f_flags |= O_NONBLOCK;
  1613.                 return 0;
  1614.         case SNDCTL_DSP_GETODELAY:
  1615. if (!(file->f_mode & FMODE_WRITE))
  1616. return -EINVAL;
  1617. if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
  1618. return val;
  1619. spin_lock_irqsave(&s->lock, flags);
  1620. es1371_update_ptr(s);
  1621.                 count = s->dma_dac2.count;
  1622. spin_unlock_irqrestore(&s->lock, flags);
  1623. if (count < 0)
  1624. count = 0;
  1625. return put_user(count, (int *)arg);
  1626.         case SNDCTL_DSP_GETIPTR:
  1627. if (!(file->f_mode & FMODE_READ))
  1628. return -EINVAL;
  1629. if (!s->dma_adc.ready && (val = prog_dmabuf_adc(s)) != 0)
  1630. return val;
  1631. spin_lock_irqsave(&s->lock, flags);
  1632. es1371_update_ptr(s);
  1633.                 cinfo.bytes = s->dma_adc.total_bytes;
  1634. count = s->dma_adc.count;
  1635. if (count < 0)
  1636. count = 0;
  1637.                 cinfo.blocks = count >> s->dma_adc.fragshift;
  1638.                 cinfo.ptr = s->dma_adc.hwptr;
  1639. if (s->dma_adc.mapped)
  1640. s->dma_adc.count &= s->dma_adc.fragsize-1;
  1641. spin_unlock_irqrestore(&s->lock, flags);
  1642.                 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
  1643.         case SNDCTL_DSP_GETOPTR:
  1644. if (!(file->f_mode & FMODE_WRITE))
  1645. return -EINVAL;
  1646. if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
  1647. return val;
  1648. spin_lock_irqsave(&s->lock, flags);
  1649. es1371_update_ptr(s);
  1650.                 cinfo.bytes = s->dma_dac2.total_bytes;
  1651. count = s->dma_dac2.count;
  1652. if (count < 0)
  1653. count = 0;
  1654.                 cinfo.blocks = count >> s->dma_dac2.fragshift;
  1655.                 cinfo.ptr = s->dma_dac2.hwptr;
  1656. if (s->dma_dac2.mapped)
  1657. s->dma_dac2.count &= s->dma_dac2.fragsize-1;
  1658. spin_unlock_irqrestore(&s->lock, flags);
  1659.                 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
  1660.         case SNDCTL_DSP_GETBLKSIZE:
  1661. if (file->f_mode & FMODE_WRITE) {
  1662. if ((val = prog_dmabuf_dac2(s)))
  1663. return val;
  1664. return put_user(s->dma_dac2.fragsize, (int *)arg);
  1665. }
  1666. if ((val = prog_dmabuf_adc(s)))
  1667. return val;
  1668. return put_user(s->dma_adc.fragsize, (int *)arg);
  1669.         case SNDCTL_DSP_SETFRAGMENT:
  1670.                 if (get_user(val, (int *)arg))
  1671. return -EFAULT;
  1672. if (file->f_mode & FMODE_READ) {
  1673. s->dma_adc.ossfragshift = val & 0xffff;
  1674. s->dma_adc.ossmaxfrags = (val >> 16) & 0xffff;
  1675. if (s->dma_adc.ossfragshift < 4)
  1676. s->dma_adc.ossfragshift = 4;
  1677. if (s->dma_adc.ossfragshift > 15)
  1678. s->dma_adc.ossfragshift = 15;
  1679. if (s->dma_adc.ossmaxfrags < 4)
  1680. s->dma_adc.ossmaxfrags = 4;
  1681. }
  1682. if (file->f_mode & FMODE_WRITE) {
  1683. s->dma_dac2.ossfragshift = val & 0xffff;
  1684. s->dma_dac2.ossmaxfrags = (val >> 16) & 0xffff;
  1685. if (s->dma_dac2.ossfragshift < 4)
  1686. s->dma_dac2.ossfragshift = 4;
  1687. if (s->dma_dac2.ossfragshift > 15)
  1688. s->dma_dac2.ossfragshift = 15;
  1689. if (s->dma_dac2.ossmaxfrags < 4)
  1690. s->dma_dac2.ossmaxfrags = 4;
  1691. }
  1692. return 0;
  1693.         case SNDCTL_DSP_SUBDIVIDE:
  1694. if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) ||
  1695.     (file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision))
  1696. return -EINVAL;
  1697.                 if (get_user(val, (int *)arg))
  1698. return -EFAULT;
  1699. if (val != 1 && val != 2 && val != 4)
  1700. return -EINVAL;
  1701. if (file->f_mode & FMODE_READ)
  1702. s->dma_adc.subdivision = val;
  1703. if (file->f_mode & FMODE_WRITE)
  1704. s->dma_dac2.subdivision = val;
  1705. return 0;
  1706.         case SOUND_PCM_READ_RATE:
  1707. return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, (int *)arg);
  1708.         case SOUND_PCM_READ_CHANNELS:
  1709. return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, (int *)arg);
  1710.         case SOUND_PCM_READ_BITS:
  1711. return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ? 16 : 8, (int *)arg);
  1712.         case SOUND_PCM_WRITE_FILTER:
  1713.         case SNDCTL_DSP_SETSYNCRO:
  1714.         case SOUND_PCM_READ_FILTER:
  1715.                 return -EINVAL;
  1716. }
  1717. return mixdev_ioctl(&s->codec, cmd, arg);
  1718. }
  1719. static int es1371_open(struct inode *inode, struct file *file)
  1720. {
  1721. int minor = MINOR(inode->i_rdev);
  1722. DECLARE_WAITQUEUE(wait, current);
  1723. unsigned long flags;
  1724. struct list_head *list;
  1725. struct es1371_state *s;
  1726. for (list = devs.next; ; list = list->next) {
  1727. if (list == &devs)
  1728. return -ENODEV;
  1729. s = list_entry(list, struct es1371_state, devs);
  1730. if (!((s->dev_audio ^ minor) & ~0xf))
  1731. break;
  1732. }
  1733.         VALIDATE_STATE(s);
  1734. file->private_data = s;
  1735. /* wait for device to become free */
  1736. down(&s->open_sem);
  1737. while (s->open_mode & file->f_mode) {
  1738. if (file->f_flags & O_NONBLOCK) {
  1739. up(&s->open_sem);
  1740. return -EBUSY;
  1741. }
  1742. add_wait_queue(&s->open_wait, &wait);
  1743. __set_current_state(TASK_INTERRUPTIBLE);
  1744. up(&s->open_sem);
  1745. schedule();
  1746. remove_wait_queue(&s->open_wait, &wait);
  1747. set_current_state(TASK_RUNNING);
  1748. if (signal_pending(current))
  1749. return -ERESTARTSYS;
  1750. down(&s->open_sem);
  1751. }
  1752. if (file->f_mode & FMODE_READ) {
  1753. s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
  1754. s->dma_adc.enabled = 1;
  1755. set_adc_rate(s, 8000);
  1756. }
  1757. if (file->f_mode & FMODE_WRITE) {
  1758. s->dma_dac2.ossfragshift = s->dma_dac2.ossmaxfrags = s->dma_dac2.subdivision = 0;
  1759. s->dma_dac2.enabled = 1;
  1760. set_dac2_rate(s, 8000);
  1761. }
  1762. spin_lock_irqsave(&s->lock, flags);
  1763. if (file->f_mode & FMODE_READ) {
  1764. s->sctrl &= ~SCTRL_R1FMT;
  1765. if ((minor & 0xf) == SND_DEV_DSP16)
  1766. s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_R1FMT;
  1767. else
  1768. s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_R1FMT;
  1769. }
  1770. if (file->f_mode & FMODE_WRITE) {
  1771. s->sctrl &= ~SCTRL_P2FMT;
  1772. if ((minor & 0xf) == SND_DEV_DSP16)
  1773. s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P2FMT;
  1774. else
  1775. s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P2FMT;
  1776. }
  1777. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1778. spin_unlock_irqrestore(&s->lock, flags);
  1779. s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
  1780. up(&s->open_sem);
  1781. init_MUTEX(&s->sem);
  1782. return 0;
  1783. }
  1784. static int es1371_release(struct inode *inode, struct file *file)
  1785. {
  1786. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1787. VALIDATE_STATE(s);
  1788. lock_kernel();
  1789. if (file->f_mode & FMODE_WRITE)
  1790. drain_dac2(s, file->f_flags & O_NONBLOCK);
  1791. down(&s->open_sem);
  1792. if (file->f_mode & FMODE_WRITE) {
  1793. stop_dac2(s);
  1794. dealloc_dmabuf(s, &s->dma_dac2);
  1795. }
  1796. if (file->f_mode & FMODE_READ) {
  1797. stop_adc(s);
  1798. dealloc_dmabuf(s, &s->dma_adc);
  1799. }
  1800. s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
  1801. up(&s->open_sem);
  1802. wake_up(&s->open_wait);
  1803. unlock_kernel();
  1804. return 0;
  1805. }
  1806. static /*const*/ struct file_operations es1371_audio_fops = {
  1807. owner: THIS_MODULE,
  1808. llseek: no_llseek,
  1809. read: es1371_read,
  1810. write: es1371_write,
  1811. poll: es1371_poll,
  1812. ioctl: es1371_ioctl,
  1813. mmap: es1371_mmap,
  1814. open: es1371_open,
  1815. release: es1371_release,
  1816. };
  1817. /* --------------------------------------------------------------------- */
  1818. static ssize_t es1371_write_dac(struct file *file, const char *buffer, size_t count, loff_t *ppos)
  1819. {
  1820. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1821. DECLARE_WAITQUEUE(wait, current);
  1822. ssize_t ret = 0;
  1823. unsigned long flags;
  1824. unsigned swptr;
  1825. int cnt;
  1826. VALIDATE_STATE(s);
  1827. if (ppos != &file->f_pos)
  1828. return -ESPIPE;
  1829. if (s->dma_dac1.mapped)
  1830. return -ENXIO;
  1831. if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
  1832. return ret;
  1833. if (!access_ok(VERIFY_READ, buffer, count))
  1834. return -EFAULT;
  1835. add_wait_queue(&s->dma_dac1.wait, &wait);
  1836. while (count > 0) {
  1837. spin_lock_irqsave(&s->lock, flags);
  1838. if (s->dma_dac1.count < 0) {
  1839. s->dma_dac1.count = 0;
  1840. s->dma_dac1.swptr = s->dma_dac1.hwptr;
  1841. }
  1842. swptr = s->dma_dac1.swptr;
  1843. cnt = s->dma_dac1.dmasize-swptr;
  1844. if (s->dma_dac1.count + cnt > s->dma_dac1.dmasize)
  1845. cnt = s->dma_dac1.dmasize - s->dma_dac1.count;
  1846. if (cnt <= 0)
  1847. __set_current_state(TASK_INTERRUPTIBLE);
  1848. spin_unlock_irqrestore(&s->lock, flags);
  1849. if (cnt > count)
  1850. cnt = count;
  1851. if (cnt <= 0) {
  1852. if (s->dma_dac1.enabled)
  1853. start_dac1(s);
  1854. if (file->f_flags & O_NONBLOCK) {
  1855. if (!ret)
  1856. ret = -EAGAIN;
  1857. break;
  1858. }
  1859. schedule();
  1860. if (signal_pending(current)) {
  1861. if (!ret)
  1862. ret = -ERESTARTSYS;
  1863. break;
  1864. }
  1865. continue;
  1866. }
  1867. if (copy_from_user(s->dma_dac1.rawbuf + swptr, buffer, cnt)) {
  1868. if (!ret)
  1869. ret = -EFAULT;
  1870. break;
  1871. }
  1872. swptr = (swptr + cnt) % s->dma_dac1.dmasize;
  1873. spin_lock_irqsave(&s->lock, flags);
  1874. s->dma_dac1.swptr = swptr;
  1875. s->dma_dac1.count += cnt;
  1876. s->dma_dac1.endcleared = 0;
  1877. spin_unlock_irqrestore(&s->lock, flags);
  1878. count -= cnt;
  1879. buffer += cnt;
  1880. ret += cnt;
  1881. if (s->dma_dac1.enabled)
  1882. start_dac1(s);
  1883. }
  1884. remove_wait_queue(&s->dma_dac1.wait, &wait);
  1885. set_current_state(TASK_RUNNING);
  1886. return ret;
  1887. }
  1888. /* No kernel lock - we have our own spinlock */
  1889. static unsigned int es1371_poll_dac(struct file *file, struct poll_table_struct *wait)
  1890. {
  1891. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1892. unsigned long flags;
  1893. unsigned int mask = 0;
  1894. VALIDATE_STATE(s);
  1895. if (!s->dma_dac1.ready && prog_dmabuf_dac1(s))
  1896. return 0;
  1897. poll_wait(file, &s->dma_dac1.wait, wait);
  1898. spin_lock_irqsave(&s->lock, flags);
  1899. es1371_update_ptr(s);
  1900. if (s->dma_dac1.mapped) {
  1901. if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
  1902. mask |= POLLOUT | POLLWRNORM;
  1903. } else {
  1904. if ((signed)s->dma_dac1.dmasize >= s->dma_dac1.count + (signed)s->dma_dac1.fragsize)
  1905. mask |= POLLOUT | POLLWRNORM;
  1906. }
  1907. spin_unlock_irqrestore(&s->lock, flags);
  1908. return mask;
  1909. }
  1910. static int es1371_mmap_dac(struct file *file, struct vm_area_struct *vma)
  1911. {
  1912. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1913. int ret;
  1914. unsigned long size;
  1915. VALIDATE_STATE(s);
  1916. if (!(vma->vm_flags & VM_WRITE))
  1917. return -EINVAL;
  1918. lock_kernel();
  1919. if ((ret = prog_dmabuf_dac1(s)) != 0)
  1920. goto out;
  1921. ret = -EINVAL;
  1922. if (vma->vm_pgoff != 0)
  1923. goto out;
  1924. size = vma->vm_end - vma->vm_start;
  1925. if (size > (PAGE_SIZE << s->dma_dac1.buforder))
  1926. goto out;
  1927. ret = -EAGAIN;
  1928. if (remap_page_range(vma->vm_start, virt_to_phys(s->dma_dac1.rawbuf), size, vma->vm_page_prot))
  1929. goto out;
  1930. s->dma_dac1.mapped = 1;
  1931. ret = 0;
  1932. out:
  1933. unlock_kernel();
  1934. return ret;
  1935. }
  1936. static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
  1937. {
  1938. struct es1371_state *s = (struct es1371_state *)file->private_data;
  1939. unsigned long flags;
  1940.         audio_buf_info abinfo;
  1941.         count_info cinfo;
  1942. int count;
  1943. int val, ret;
  1944. VALIDATE_STATE(s);
  1945. switch (cmd) {
  1946. case OSS_GETVERSION:
  1947. return put_user(SOUND_VERSION, (int *)arg);
  1948. case SNDCTL_DSP_SYNC:
  1949. return drain_dac1(s, 0/*file->f_flags & O_NONBLOCK*/);
  1950. case SNDCTL_DSP_SETDUPLEX:
  1951. return -EINVAL;
  1952. case SNDCTL_DSP_GETCAPS:
  1953. return put_user(DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
  1954.         case SNDCTL_DSP_RESET:
  1955. stop_dac1(s);
  1956. synchronize_irq();
  1957. s->dma_dac1.swptr = s->dma_dac1.hwptr = s->dma_dac1.count = s->dma_dac1.total_bytes = 0;
  1958. return 0;
  1959.         case SNDCTL_DSP_SPEED:
  1960.                 if (get_user(val, (int *)arg))
  1961. return -EFAULT;
  1962. if (val >= 0) {
  1963. stop_dac1(s);
  1964. s->dma_dac1.ready = 0;
  1965. set_dac1_rate(s, val);
  1966. }
  1967. return put_user(s->dac1rate, (int *)arg);
  1968.         case SNDCTL_DSP_STEREO:
  1969. if (get_user(val, (int *)arg))
  1970. return -EFAULT;
  1971. stop_dac1(s);
  1972. s->dma_dac1.ready = 0;
  1973. spin_lock_irqsave(&s->lock, flags);
  1974. if (val)
  1975. s->sctrl |= SCTRL_P1SMB;
  1976. else
  1977. s->sctrl &= ~SCTRL_P1SMB;
  1978. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1979. spin_unlock_irqrestore(&s->lock, flags);
  1980. return 0;
  1981.         case SNDCTL_DSP_CHANNELS:
  1982.                 if (get_user(val, (int *)arg))
  1983. return -EFAULT;
  1984. if (val != 0) {
  1985. stop_dac1(s);
  1986. s->dma_dac1.ready = 0;
  1987. spin_lock_irqsave(&s->lock, flags);
  1988. if (val >= 2)
  1989. s->sctrl |= SCTRL_P1SMB;
  1990. else
  1991. s->sctrl &= ~SCTRL_P1SMB;
  1992. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  1993. spin_unlock_irqrestore(&s->lock, flags);
  1994. }
  1995. return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, (int *)arg);
  1996.         case SNDCTL_DSP_GETFMTS: /* Returns a mask */
  1997.                 return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
  1998.         case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
  1999. if (get_user(val, (int *)arg))
  2000. return -EFAULT;
  2001. if (val != AFMT_QUERY) {
  2002. stop_dac1(s);
  2003. s->dma_dac1.ready = 0;
  2004. spin_lock_irqsave(&s->lock, flags);
  2005. if (val == AFMT_S16_LE)
  2006. s->sctrl |= SCTRL_P1SEB;
  2007. else
  2008. s->sctrl &= ~SCTRL_P1SEB;
  2009. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  2010. spin_unlock_irqrestore(&s->lock, flags);
  2011. }
  2012. return put_user((s->sctrl & SCTRL_P1SEB) ? AFMT_S16_LE : AFMT_U8, (int *)arg);
  2013.         case SNDCTL_DSP_POST:
  2014.                 return 0;
  2015.         case SNDCTL_DSP_GETTRIGGER:
  2016. return put_user((s->ctrl & CTRL_DAC1_EN) ? PCM_ENABLE_OUTPUT : 0, (int *)arg);
  2017. case SNDCTL_DSP_SETTRIGGER:
  2018. if (get_user(val, (int *)arg))
  2019. return -EFAULT;
  2020. if (val & PCM_ENABLE_OUTPUT) {
  2021. if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
  2022. return ret;
  2023. s->dma_dac1.enabled = 1;
  2024. start_dac1(s);
  2025. } else {
  2026. s->dma_dac1.enabled = 0;
  2027. stop_dac1(s);
  2028. }
  2029. return 0;
  2030. case SNDCTL_DSP_GETOSPACE:
  2031. if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
  2032. return val;
  2033. spin_lock_irqsave(&s->lock, flags);
  2034. es1371_update_ptr(s);
  2035. abinfo.fragsize = s->dma_dac1.fragsize;
  2036. count = s->dma_dac1.count;
  2037. if (count < 0)
  2038. count = 0;
  2039.                 abinfo.bytes = s->dma_dac1.dmasize - count;
  2040.                 abinfo.fragstotal = s->dma_dac1.numfrag;
  2041.                 abinfo.fragments = abinfo.bytes >> s->dma_dac1.fragshift;      
  2042. spin_unlock_irqrestore(&s->lock, flags);
  2043. return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
  2044.         case SNDCTL_DSP_NONBLOCK:
  2045.                 file->f_flags |= O_NONBLOCK;
  2046.                 return 0;
  2047.         case SNDCTL_DSP_GETODELAY:
  2048. if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
  2049. return val;
  2050. spin_lock_irqsave(&s->lock, flags);
  2051. es1371_update_ptr(s);
  2052.                 count = s->dma_dac1.count;
  2053. spin_unlock_irqrestore(&s->lock, flags);
  2054. if (count < 0)
  2055. count = 0;
  2056. return put_user(count, (int *)arg);
  2057.         case SNDCTL_DSP_GETOPTR:
  2058. if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
  2059. return val;
  2060. spin_lock_irqsave(&s->lock, flags);
  2061. es1371_update_ptr(s);
  2062.                 cinfo.bytes = s->dma_dac1.total_bytes;
  2063. count = s->dma_dac1.count;
  2064. if (count < 0)
  2065. count = 0;
  2066.                 cinfo.blocks = count >> s->dma_dac1.fragshift;
  2067.                 cinfo.ptr = s->dma_dac1.hwptr;
  2068. if (s->dma_dac1.mapped)
  2069. s->dma_dac1.count &= s->dma_dac1.fragsize-1;
  2070. spin_unlock_irqrestore(&s->lock, flags);
  2071.                 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
  2072.         case SNDCTL_DSP_GETBLKSIZE:
  2073. if ((val = prog_dmabuf_dac1(s)))
  2074. return val;
  2075.                 return put_user(s->dma_dac1.fragsize, (int *)arg);
  2076.         case SNDCTL_DSP_SETFRAGMENT:
  2077.                 if (get_user(val, (int *)arg))
  2078. return -EFAULT;
  2079. s->dma_dac1.ossfragshift = val & 0xffff;
  2080. s->dma_dac1.ossmaxfrags = (val >> 16) & 0xffff;
  2081. if (s->dma_dac1.ossfragshift < 4)
  2082. s->dma_dac1.ossfragshift = 4;
  2083. if (s->dma_dac1.ossfragshift > 15)
  2084. s->dma_dac1.ossfragshift = 15;
  2085. if (s->dma_dac1.ossmaxfrags < 4)
  2086. s->dma_dac1.ossmaxfrags = 4;
  2087. return 0;
  2088.         case SNDCTL_DSP_SUBDIVIDE:
  2089. if (s->dma_dac1.subdivision)
  2090. return -EINVAL;
  2091.                 if (get_user(val, (int *)arg))
  2092. return -EFAULT;
  2093. if (val != 1 && val != 2 && val != 4)
  2094. return -EINVAL;
  2095. s->dma_dac1.subdivision = val;
  2096. return 0;
  2097.         case SOUND_PCM_READ_RATE:
  2098. return put_user(s->dac1rate, (int *)arg);
  2099.         case SOUND_PCM_READ_CHANNELS:
  2100. return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, (int *)arg);
  2101.         case SOUND_PCM_READ_BITS:
  2102. return put_user((s->sctrl & SCTRL_P1SEB) ? 16 : 8, (int *)arg);
  2103.         case SOUND_PCM_WRITE_FILTER:
  2104.         case SNDCTL_DSP_SETSYNCRO:
  2105.         case SOUND_PCM_READ_FILTER:
  2106.                 return -EINVAL;
  2107. }
  2108. return mixdev_ioctl(&s->codec, cmd, arg);
  2109. }
  2110. static int es1371_open_dac(struct inode *inode, struct file *file)
  2111. {
  2112. int minor = MINOR(inode->i_rdev);
  2113. DECLARE_WAITQUEUE(wait, current);
  2114. unsigned long flags;
  2115. struct list_head *list;
  2116. struct es1371_state *s;
  2117. for (list = devs.next; ; list = list->next) {
  2118. if (list == &devs)
  2119. return -ENODEV;
  2120. s = list_entry(list, struct es1371_state, devs);
  2121. if (!((s->dev_dac ^ minor) & ~0xf))
  2122. break;
  2123. }
  2124.         VALIDATE_STATE(s);
  2125.         /* we allow opening with O_RDWR, most programs do it although they will only write */
  2126. #if 0
  2127. if (file->f_mode & FMODE_READ)
  2128. return -EPERM;
  2129. #endif
  2130. if (!(file->f_mode & FMODE_WRITE))
  2131. return -EINVAL;
  2132.         file->private_data = s;
  2133. /* wait for device to become free */
  2134. down(&s->open_sem);
  2135. while (s->open_mode & FMODE_DAC) {
  2136. if (file->f_flags & O_NONBLOCK) {
  2137. up(&s->open_sem);
  2138. return -EBUSY;
  2139. }
  2140. add_wait_queue(&s->open_wait, &wait);
  2141. __set_current_state(TASK_INTERRUPTIBLE);
  2142. up(&s->open_sem);
  2143. schedule();
  2144. remove_wait_queue(&s->open_wait, &wait);
  2145. set_current_state(TASK_RUNNING);
  2146. if (signal_pending(current))
  2147. return -ERESTARTSYS;
  2148. down(&s->open_sem);
  2149. }
  2150. s->dma_dac1.ossfragshift = s->dma_dac1.ossmaxfrags = s->dma_dac1.subdivision = 0;
  2151. s->dma_dac1.enabled = 1;
  2152. set_dac1_rate(s, 8000);
  2153. spin_lock_irqsave(&s->lock, flags);
  2154. s->sctrl &= ~SCTRL_P1FMT;
  2155. if ((minor & 0xf) == SND_DEV_DSP16)
  2156. s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P1FMT;
  2157. else
  2158. s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P1FMT;
  2159. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  2160. spin_unlock_irqrestore(&s->lock, flags);
  2161. s->open_mode |= FMODE_DAC;
  2162. up(&s->open_sem);
  2163. return 0;
  2164. }
  2165. static int es1371_release_dac(struct inode *inode, struct file *file)
  2166. {
  2167. struct es1371_state *s = (struct es1371_state *)file->private_data;
  2168. VALIDATE_STATE(s);
  2169. lock_kernel();
  2170. drain_dac1(s, file->f_flags & O_NONBLOCK);
  2171. down(&s->open_sem);
  2172. stop_dac1(s);
  2173. dealloc_dmabuf(s, &s->dma_dac1);
  2174. s->open_mode &= ~FMODE_DAC;
  2175. up(&s->open_sem);
  2176. wake_up(&s->open_wait);
  2177. unlock_kernel();
  2178. return 0;
  2179. }
  2180. static /*const*/ struct file_operations es1371_dac_fops = {
  2181. owner: THIS_MODULE,
  2182. llseek: no_llseek,
  2183. write: es1371_write_dac,
  2184. poll: es1371_poll_dac,
  2185. ioctl: es1371_ioctl_dac,
  2186. mmap: es1371_mmap_dac,
  2187. open: es1371_open_dac,
  2188. release: es1371_release_dac,
  2189. };
  2190. /* --------------------------------------------------------------------- */
  2191. static ssize_t es1371_midi_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
  2192. {
  2193. struct es1371_state *s = (struct es1371_state *)file->private_data;
  2194. DECLARE_WAITQUEUE(wait, current);
  2195. ssize_t ret;
  2196. unsigned long flags;
  2197. unsigned ptr;
  2198. int cnt;
  2199. VALIDATE_STATE(s);
  2200. if (ppos != &file->f_pos)
  2201. return -ESPIPE;
  2202. if (!access_ok(VERIFY_WRITE, buffer, count))
  2203. return -EFAULT;
  2204. if (count == 0)
  2205. return 0;
  2206. ret = 0;
  2207.         add_wait_queue(&s->midi.iwait, &wait);
  2208. while (count > 0) {
  2209. spin_lock_irqsave(&s->lock, flags);
  2210. ptr = s->midi.ird;
  2211. cnt = MIDIINBUF - ptr;
  2212. if (s->midi.icnt < cnt)
  2213. cnt = s->midi.icnt;
  2214. if (cnt <= 0)
  2215. __set_current_state(TASK_INTERRUPTIBLE);
  2216. spin_unlock_irqrestore(&s->lock, flags);
  2217. if (cnt > count)
  2218. cnt = count;
  2219. if (cnt <= 0) {
  2220. if (file->f_flags & O_NONBLOCK) {
  2221. if (!ret)
  2222. ret = -EAGAIN;
  2223. break;
  2224. }
  2225. schedule();
  2226. if (signal_pending(current)) {
  2227. if (!ret)
  2228. ret = -ERESTARTSYS;
  2229. break;
  2230. }
  2231. continue;
  2232. }
  2233. if (copy_to_user(buffer, s->midi.ibuf + ptr, cnt)) {
  2234. if (!ret)
  2235. ret = -EFAULT;
  2236. break;
  2237. }
  2238. ptr = (ptr + cnt) % MIDIINBUF;
  2239. spin_lock_irqsave(&s->lock, flags);
  2240. s->midi.ird = ptr;
  2241. s->midi.icnt -= cnt;
  2242. spin_unlock_irqrestore(&s->lock, flags);
  2243. count -= cnt;
  2244. buffer += cnt;
  2245. ret += cnt;
  2246. break;
  2247. }
  2248. __set_current_state(TASK_RUNNING);
  2249. remove_wait_queue(&s->midi.iwait, &wait);
  2250. return ret;
  2251. }
  2252. static ssize_t es1371_midi_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
  2253. {
  2254. struct es1371_state *s = (struct es1371_state *)file->private_data;
  2255. DECLARE_WAITQUEUE(wait, current);
  2256. ssize_t ret;
  2257. unsigned long flags;
  2258. unsigned ptr;
  2259. int cnt;
  2260. VALIDATE_STATE(s);
  2261. if (ppos != &file->f_pos)
  2262. return -ESPIPE;
  2263. if (!access_ok(VERIFY_READ, buffer, count))
  2264. return -EFAULT;
  2265. if (count == 0)
  2266. return 0;
  2267. ret = 0;
  2268.         add_wait_queue(&s->midi.owait, &wait);
  2269. while (count > 0) {
  2270. spin_lock_irqsave(&s->lock, flags);
  2271. ptr = s->midi.owr;
  2272. cnt = MIDIOUTBUF - ptr;
  2273. if (s->midi.ocnt + cnt > MIDIOUTBUF)
  2274. cnt = MIDIOUTBUF - s->midi.ocnt;
  2275. if (cnt <= 0) {
  2276. __set_current_state(TASK_INTERRUPTIBLE);
  2277. es1371_handle_midi(s);
  2278. }
  2279. spin_unlock_irqrestore(&s->lock, flags);
  2280. if (cnt > count)
  2281. cnt = count;
  2282. if (cnt <= 0) {
  2283. if (file->f_flags & O_NONBLOCK) {
  2284. if (!ret)
  2285. ret = -EAGAIN;
  2286. break;
  2287. }
  2288. schedule();
  2289. if (signal_pending(current)) {
  2290. if (!ret)
  2291. ret = -ERESTARTSYS;
  2292. break;
  2293. }
  2294. continue;
  2295. }
  2296. if (copy_from_user(s->midi.obuf + ptr, buffer, cnt)) {
  2297. if (!ret)
  2298. ret = -EFAULT;
  2299. break;
  2300. }
  2301. ptr = (ptr + cnt) % MIDIOUTBUF;
  2302. spin_lock_irqsave(&s->lock, flags);
  2303. s->midi.owr = ptr;
  2304. s->midi.ocnt += cnt;
  2305. spin_unlock_irqrestore(&s->lock, flags);
  2306. count -= cnt;
  2307. buffer += cnt;
  2308. ret += cnt;
  2309. spin_lock_irqsave(&s->lock, flags);
  2310. es1371_handle_midi(s);
  2311. spin_unlock_irqrestore(&s->lock, flags);
  2312. }
  2313. __set_current_state(TASK_RUNNING);
  2314. remove_wait_queue(&s->midi.owait, &wait);
  2315. return ret;
  2316. }
  2317. /* No kernel lock - we have our own spinlock */
  2318. static unsigned int es1371_midi_poll(struct file *file, struct poll_table_struct *wait)
  2319. {
  2320. struct es1371_state *s = (struct es1371_state *)file->private_data;
  2321. unsigned long flags;
  2322. unsigned int mask = 0;
  2323. VALIDATE_STATE(s);
  2324. if (file->f_mode & FMODE_WRITE)
  2325. poll_wait(file, &s->midi.owait, wait);
  2326. if (file->f_mode & FMODE_READ)
  2327. poll_wait(file, &s->midi.iwait, wait);
  2328. spin_lock_irqsave(&s->lock, flags);
  2329. if (file->f_mode & FMODE_READ) {
  2330. if (s->midi.icnt > 0)
  2331. mask |= POLLIN | POLLRDNORM;
  2332. }
  2333. if (file->f_mode & FMODE_WRITE) {
  2334. if (s->midi.ocnt < MIDIOUTBUF)
  2335. mask |= POLLOUT | POLLWRNORM;
  2336. }
  2337. spin_unlock_irqrestore(&s->lock, flags);
  2338. return mask;
  2339. }
  2340. static int es1371_midi_open(struct inode *inode, struct file *file)
  2341. {
  2342. int minor = MINOR(inode->i_rdev);
  2343. DECLARE_WAITQUEUE(wait, current);
  2344. unsigned long flags;
  2345. struct list_head *list;
  2346. struct es1371_state *s;
  2347. for (list = devs.next; ; list = list->next) {
  2348. if (list == &devs)
  2349. return -ENODEV;
  2350. s = list_entry(list, struct es1371_state, devs);
  2351. if (s->dev_midi == minor)
  2352. break;
  2353. }
  2354.         VALIDATE_STATE(s);
  2355. file->private_data = s;
  2356. /* wait for device to become free */
  2357. down(&s->open_sem);
  2358. while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
  2359. if (file->f_flags & O_NONBLOCK) {
  2360. up(&s->open_sem);
  2361. return -EBUSY;
  2362. }
  2363. add_wait_queue(&s->open_wait, &wait);
  2364. __set_current_state(TASK_INTERRUPTIBLE);
  2365. up(&s->open_sem);
  2366. schedule();
  2367. remove_wait_queue(&s->open_wait, &wait);
  2368. set_current_state(TASK_RUNNING);
  2369. if (signal_pending(current))
  2370. return -ERESTARTSYS;
  2371. down(&s->open_sem);
  2372. }
  2373. spin_lock_irqsave(&s->lock, flags);
  2374. if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
  2375. s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
  2376. s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
  2377. outb(UCTRL_CNTRL_SWR, s->io+ES1371_REG_UART_CONTROL);
  2378. outb(0, s->io+ES1371_REG_UART_CONTROL);
  2379. outb(0, s->io+ES1371_REG_UART_TEST);
  2380. }
  2381. if (file->f_mode & FMODE_READ) {
  2382. s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
  2383. }
  2384. if (file->f_mode & FMODE_WRITE) {
  2385. s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
  2386. }
  2387. s->ctrl |= CTRL_UART_EN;
  2388. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  2389. es1371_handle_midi(s);
  2390. spin_unlock_irqrestore(&s->lock, flags);
  2391. s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
  2392. up(&s->open_sem);
  2393. return 0;
  2394. }
  2395. static int es1371_midi_release(struct inode *inode, struct file *file)
  2396. {
  2397. struct es1371_state *s = (struct es1371_state *)file->private_data;
  2398. DECLARE_WAITQUEUE(wait, current);
  2399. unsigned long flags;
  2400. unsigned count, tmo;
  2401. VALIDATE_STATE(s);
  2402. lock_kernel();
  2403. if (file->f_mode & FMODE_WRITE) {
  2404. add_wait_queue(&s->midi.owait, &wait);
  2405. for (;;) {
  2406. __set_current_state(TASK_INTERRUPTIBLE);
  2407. spin_lock_irqsave(&s->lock, flags);
  2408. count = s->midi.ocnt;
  2409. spin_unlock_irqrestore(&s->lock, flags);
  2410. if (count <= 0)
  2411. break;
  2412. if (signal_pending(current))
  2413. break;
  2414. if (file->f_flags & O_NONBLOCK) {
  2415. break;
  2416. }
  2417. tmo = (count * HZ) / 3100;
  2418. if (!schedule_timeout(tmo ? : 1) && tmo)
  2419. printk(KERN_DEBUG PFX "midi timed out??n");
  2420. }
  2421. remove_wait_queue(&s->midi.owait, &wait);
  2422. set_current_state(TASK_RUNNING);
  2423. }
  2424. down(&s->open_sem);
  2425. s->open_mode &= (~(file->f_mode << FMODE_MIDI_SHIFT)) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE);
  2426. spin_lock_irqsave(&s->lock, flags);
  2427. if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
  2428. s->ctrl &= ~CTRL_UART_EN;
  2429. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  2430. }
  2431. spin_unlock_irqrestore(&s->lock, flags);
  2432. up(&s->open_sem);
  2433. wake_up(&s->open_wait);
  2434. unlock_kernel();
  2435. return 0;
  2436. }
  2437. static /*const*/ struct file_operations es1371_midi_fops = {
  2438. owner: THIS_MODULE,
  2439. llseek: no_llseek,
  2440. read: es1371_midi_read,
  2441. write: es1371_midi_write,
  2442. poll: es1371_midi_poll,
  2443. open: es1371_midi_open,
  2444. release: es1371_midi_release,
  2445. };
  2446. /* --------------------------------------------------------------------- */
  2447. /*
  2448.  * for debugging purposes, we'll create a proc device that dumps the
  2449.  * CODEC chipstate
  2450.  */
  2451. #ifdef ES1371_DEBUG
  2452. static int proc_es1371_dump (char *buf, char **start, off_t fpos, int length, int *eof, void *data)
  2453. {
  2454. struct es1371_state *s;
  2455.         int cnt, len = 0;
  2456. if (list_empty(&devs))
  2457. return 0;
  2458. s = list_entry(devs.next, struct es1371_state, devs);
  2459.         /* print out header */
  2460.         len += sprintf(buf + len, "ttCreative ES137x Debug Dump-o-maticn");
  2461.         /* print out CODEC state */
  2462.         len += sprintf (buf + len, "AC97 CODEC staten");
  2463. for (cnt=0; cnt <= 0x7e; cnt = cnt +2)
  2464.                 len+= sprintf (buf + len, "reg:0x%02x  val:0x%04xn", cnt, rdcodec(&s->codec, cnt));
  2465.         if (fpos >=len){
  2466.                 *start = buf;
  2467.                 *eof =1;
  2468.                 return 0;
  2469.         }
  2470.         *start = buf + fpos;
  2471.         if ((len -= fpos) > length)
  2472.                 return length;
  2473.         *eof =1;
  2474.         return len;
  2475. }
  2476. #endif /* ES1371_DEBUG */
  2477. /* --------------------------------------------------------------------- */
  2478. /* maximum number of devices; only used for command line params */
  2479. #define NR_DEVICE 5
  2480. static int joystick[NR_DEVICE] = { 0, };
  2481. static int spdif[NR_DEVICE] = { 0, };
  2482. static int nomix[NR_DEVICE] = { 0, };
  2483. static unsigned int devindex = 0;
  2484. static int amplifier = 0;
  2485. MODULE_PARM(joystick, "1-" __MODULE_STRING(NR_DEVICE) "i");
  2486. MODULE_PARM_DESC(joystick, "sets address and enables joystick interface (still need separate driver)");
  2487. MODULE_PARM(spdif, "1-" __MODULE_STRING(NR_DEVICE) "i");
  2488. MODULE_PARM_DESC(spdif, "if 1 the output is in S/PDIF digital mode");
  2489. MODULE_PARM(nomix, "1-" __MODULE_STRING(NR_DEVICE) "i");
  2490. MODULE_PARM_DESC(nomix, "if 1 no analog audio is mixed to the digital output");
  2491. MODULE_PARM(amplifier, "i");
  2492. MODULE_PARM_DESC(amplifier, "Set to 1 if the machine needs the amp control enabling (many laptops)");
  2493. MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
  2494. MODULE_DESCRIPTION("ES1371 AudioPCI97 Driver");
  2495. MODULE_LICENSE("GPL");
  2496. /* --------------------------------------------------------------------- */
  2497. static struct initvol {
  2498. int mixch;
  2499. int vol;
  2500. } initvol[] __initdata = {
  2501. { SOUND_MIXER_WRITE_LINE, 0x4040 },
  2502. { SOUND_MIXER_WRITE_CD, 0x4040 },
  2503. { MIXER_WRITE(SOUND_MIXER_VIDEO), 0x4040 },
  2504. { SOUND_MIXER_WRITE_LINE1, 0x4040 },
  2505. { SOUND_MIXER_WRITE_PCM, 0x4040 },
  2506. { SOUND_MIXER_WRITE_VOLUME, 0x4040 },
  2507. { MIXER_WRITE(SOUND_MIXER_PHONEOUT), 0x4040 },
  2508. { SOUND_MIXER_WRITE_OGAIN, 0x4040 },
  2509. { MIXER_WRITE(SOUND_MIXER_PHONEIN), 0x4040 },
  2510. { SOUND_MIXER_WRITE_SPEAKER, 0x4040 },
  2511. { SOUND_MIXER_WRITE_MIC, 0x4040 },
  2512. { SOUND_MIXER_WRITE_RECLEV, 0x4040 },
  2513. { SOUND_MIXER_WRITE_IGAIN, 0x4040 }
  2514. };
  2515. static struct
  2516. {
  2517. short svid, sdid;
  2518. } amplifier_needed[] = 
  2519. {
  2520. { 0x107B, 0x2150 }, /* Gateway Solo 2150 */
  2521. { 0x13BD, 0x100C }, /* Mebius PC-MJ100V */
  2522. { 0x1102, 0x5938 }, /* Targa Xtender 300 */
  2523. { 0x1102, 0x8938 }, /* IPC notebook */
  2524. { PCI_ANY_ID, PCI_ANY_ID }
  2525. };
  2526. static int __devinit es1371_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid)
  2527. {
  2528. struct es1371_state *s;
  2529. mm_segment_t fs;
  2530. int i, val, res = -1;
  2531. int idx;
  2532. unsigned long tmo;
  2533. signed long tmo2;
  2534. unsigned int cssr;
  2535. if ((res=pci_enable_device(pcidev)))
  2536. return res;
  2537. if (!(pci_resource_flags(pcidev, 0) & IORESOURCE_IO))
  2538. return -ENODEV;
  2539. if (pcidev->irq == 0) 
  2540. return -ENODEV;
  2541. i = pci_set_dma_mask(pcidev, 0xffffffff);
  2542. if (i) {
  2543. printk(KERN_WARNING "es1371: architecture does not support 32bit PCI busmaster DMAn");
  2544. return i;
  2545. }
  2546. if (!(s = kmalloc(sizeof(struct es1371_state), GFP_KERNEL))) {
  2547. printk(KERN_WARNING PFX "out of memoryn");
  2548. return -ENOMEM;
  2549. }
  2550. memset(s, 0, sizeof(struct es1371_state));
  2551. init_waitqueue_head(&s->dma_adc.wait);
  2552. init_waitqueue_head(&s->dma_dac1.wait);
  2553. init_waitqueue_head(&s->dma_dac2.wait);
  2554. init_waitqueue_head(&s->open_wait);
  2555. init_waitqueue_head(&s->midi.iwait);
  2556. init_waitqueue_head(&s->midi.owait);
  2557. init_MUTEX(&s->open_sem);
  2558. spin_lock_init(&s->lock);
  2559. s->magic = ES1371_MAGIC;
  2560. s->dev = pcidev;
  2561. s->io = pci_resource_start(pcidev, 0);
  2562. s->irq = pcidev->irq;
  2563. s->vendor = pcidev->vendor;
  2564. s->device = pcidev->device;
  2565. pci_read_config_byte(pcidev, PCI_REVISION_ID, &s->rev);
  2566. s->codec.private_data = s;
  2567. s->codec.id = 0;
  2568. s->codec.codec_read = rdcodec;
  2569. s->codec.codec_write = wrcodec;
  2570. printk(KERN_INFO PFX "found chip, vendor id 0x%04x device id 0x%04x revision 0x%02xn",
  2571.        s->vendor, s->device, s->rev);
  2572. if (!request_region(s->io, ES1371_EXTENT, "es1371")) {
  2573. printk(KERN_ERR PFX "io ports %#lx-%#lx in usen", s->io, s->io+ES1371_EXTENT-1);
  2574. res = -EBUSY;
  2575. goto err_region;
  2576. }
  2577. if ((res=request_irq(s->irq, es1371_interrupt, SA_SHIRQ, "es1371",s))) {
  2578. printk(KERN_ERR PFX "irq %u in usen", s->irq);
  2579. goto err_irq;
  2580. }
  2581. printk(KERN_INFO PFX "found es1371 rev %d at io %#lx irq %un"
  2582.        KERN_INFO PFX "features: joystick 0x%xn", s->rev, s->io, s->irq, joystick[devindex]);
  2583. /* register devices */
  2584. if ((res=(s->dev_audio = register_sound_dsp(&es1371_audio_fops,-1))<0))
  2585. goto err_dev1;
  2586. if ((res=(s->codec.dev_mixer = register_sound_mixer(&es1371_mixer_fops, -1)) < 0))
  2587. goto err_dev2;
  2588. if ((res=(s->dev_dac = register_sound_dsp(&es1371_dac_fops, -1)) < 0))
  2589. goto err_dev3;
  2590. if ((res=(s->dev_midi = register_sound_midi(&es1371_midi_fops, -1))<0 ))
  2591. goto err_dev4;
  2592. #ifdef ES1371_DEBUG
  2593. /* intialize the debug proc device */
  2594. s->ps = create_proc_read_entry("es1371",0,NULL,proc_es1371_dump,NULL);
  2595. #endif /* ES1371_DEBUG */
  2596. /* initialize codec registers */
  2597. s->ctrl = 0;
  2598. /* Check amplifier requirements */
  2599. if(amplifier)
  2600. s->ctrl |= CTRL_GPIO_OUT0;
  2601. else for(idx = 0; amplifier_needed[idx].svid != PCI_ANY_ID; idx++)
  2602. {
  2603. if(pcidev->subsystem_vendor == amplifier_needed[idx].svid &&
  2604.    pcidev->subsystem_device == amplifier_needed[idx].sdid)
  2605. {
  2606.                      s->ctrl |= CTRL_GPIO_OUT0;   /* turn internal amplifier on */
  2607.                      printk(KERN_INFO PFX "Enabling internal amplifier.n");
  2608. }
  2609. }
  2610. s->gameport.io = 0;
  2611. if ((joystick[devindex] & ~0x18) == 0x200) {
  2612. if (!request_region(joystick[devindex], JOY_EXTENT, "es1371"))
  2613. printk(KERN_ERR PFX "joystick address 0x%x already in usen", joystick[devindex]);
  2614. else {
  2615. s->ctrl |= CTRL_JYSTK_EN | (((joystick[devindex] >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT);
  2616. s->gameport.io = joystick[devindex];
  2617. }
  2618. } else if (joystick[devindex] == 1) {
  2619. for (i = 0x218; i >= 0x200; i -= 0x08) {
  2620. if (request_region(i, JOY_EXTENT, "es1371")) {
  2621. s->ctrl |= CTRL_JYSTK_EN | (((i >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT);
  2622. s->gameport.io = i;
  2623. break;
  2624. }
  2625. }
  2626. if (!s->gameport.io)
  2627. printk(KERN_ERR PFX "no free joystick address foundn");
  2628. }
  2629. s->sctrl = 0;
  2630. cssr = 0;
  2631. s->spdif_volume = -1;
  2632. /* check to see if s/pdif mode is being requested */
  2633. if (spdif[devindex]) {
  2634. if (s->rev >= 4) {
  2635. printk(KERN_INFO PFX "enabling S/PDIF outputn");
  2636. s->spdif_volume = 0;
  2637. cssr |= STAT_EN_SPDIF;
  2638. s->ctrl |= CTRL_SPDIFEN_B;
  2639. if (nomix[devindex]) /* don't mix analog inputs to s/pdif output */
  2640. s->ctrl |= CTRL_RECEN_B;
  2641. } else {
  2642. printk(KERN_ERR PFX "revision %d does not support S/PDIFn", s->rev);
  2643. }
  2644. }
  2645. /* initialize the chips */
  2646. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  2647. outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
  2648. outl(0, s->io+ES1371_REG_LEGACY);
  2649. pci_set_master(pcidev);  /* enable bus mastering */
  2650. /* if we are a 5880 turn on the AC97 */
  2651. if (s->vendor == PCI_VENDOR_ID_ENSONIQ &&
  2652.     ((s->device == PCI_DEVICE_ID_ENSONIQ_CT5880 && s->rev >= CT5880REV_CT5880_C) || 
  2653.      (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_CT5880_A) || 
  2654.      (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_ES1373_8))) { 
  2655. cssr |= CSTAT_5880_AC97_RST;
  2656. outl(cssr, s->io+ES1371_REG_STATUS);
  2657. /* need to delay around 20ms(bleech) to give
  2658.    some CODECs enough time to wakeup */
  2659. tmo = jiffies + (HZ / 50) + 1;
  2660. for (;;) {
  2661. tmo2 = tmo - jiffies;
  2662. if (tmo2 <= 0)
  2663. break;
  2664. schedule_timeout(tmo2);
  2665. }
  2666. }
  2667. /* AC97 warm reset to start the bitclk */
  2668. outl(s->ctrl | CTRL_SYNCRES, s->io+ES1371_REG_CONTROL);
  2669. udelay(2);
  2670. outl(s->ctrl, s->io+ES1371_REG_CONTROL);
  2671. /* init the sample rate converter */
  2672. src_init(s);
  2673. /* codec init */
  2674. if (!ac97_probe_codec(&s->codec)) {
  2675. res = -ENODEV;
  2676. goto err_gp;
  2677. }
  2678. /* set default values */
  2679. fs = get_fs();
  2680. set_fs(KERNEL_DS);
  2681. val = SOUND_MASK_LINE;
  2682. mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
  2683. for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
  2684. val = initvol[i].vol;
  2685. mixdev_ioctl(&s->codec, initvol[i].mixch, (unsigned long)&val);
  2686. }
  2687. /* mute master and PCM when in S/PDIF mode */
  2688. if (s->spdif_volume != -1) {
  2689. val = 0x0000;
  2690. s->codec.mixer_ioctl(&s->codec, SOUND_MIXER_WRITE_VOLUME, (unsigned long)&val);
  2691. s->codec.mixer_ioctl(&s->codec, SOUND_MIXER_WRITE_PCM, (unsigned long)&val);
  2692. }
  2693. set_fs(fs);
  2694. /* turn on S/PDIF output driver if requested */
  2695. outl(cssr, s->io+ES1371_REG_STATUS);
  2696. /* register gameport */
  2697. gameport_register_port(&s->gameport);
  2698. /* store it in the driver field */
  2699. pci_set_drvdata(pcidev, s);
  2700. /* put it into driver list */
  2701. list_add_tail(&s->devs, &devs);
  2702. /* increment devindex */
  2703. if (devindex < NR_DEVICE-1)
  2704. devindex++;
  2705.         return 0;
  2706.  err_gp:
  2707. if (s->gameport.io)
  2708. release_region(s->gameport.io, JOY_EXTENT);
  2709.  err_dev4:
  2710. unregister_sound_dsp(s->dev_dac);
  2711.  err_dev3:
  2712. unregister_sound_mixer(s->codec.dev_mixer);
  2713.  err_dev2:
  2714. unregister_sound_dsp(s->dev_audio);
  2715.  err_dev1:
  2716. printk(KERN_ERR PFX "cannot register misc devicen");
  2717. free_irq(s->irq, s);
  2718.  err_irq:
  2719. release_region(s->io, ES1371_EXTENT);
  2720.  err_region:
  2721. kfree(s);
  2722. return res;
  2723. }
  2724. static void __devinit es1371_remove(struct pci_dev *dev)
  2725. {
  2726. struct es1371_state *s = pci_get_drvdata(dev);
  2727. if (!s)
  2728. return;
  2729. list_del(&s->devs);
  2730. #ifdef ES1371_DEBUG
  2731. if (s->ps)
  2732. remove_proc_entry("es1371", NULL);
  2733. #endif /* ES1371_DEBUG */
  2734. outl(0, s->io+ES1371_REG_CONTROL); /* switch everything off */
  2735. outl(0, s->io+ES1371_REG_SERIAL_CONTROL); /* clear serial interrupts */
  2736. synchronize_irq();
  2737. free_irq(s->irq, s);
  2738. if (s->gameport.io) {
  2739. gameport_unregister_port(&s->gameport);
  2740. release_region(s->gameport.io, JOY_EXTENT);
  2741. }
  2742. release_region(s->io, ES1371_EXTENT);
  2743. unregister_sound_dsp(s->dev_audio);
  2744. unregister_sound_mixer(s->codec.dev_mixer);
  2745. unregister_sound_dsp(s->dev_dac);
  2746. unregister_sound_midi(s->dev_midi);
  2747. kfree(s);
  2748. pci_set_drvdata(dev, NULL);
  2749. }
  2750. static struct pci_device_id id_table[] __devinitdata = {
  2751. { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_ES1371, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
  2752. { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_CT5880, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
  2753. { PCI_VENDOR_ID_ECTIVA, PCI_DEVICE_ID_ECTIVA_EV1938, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
  2754. { 0, }
  2755. };
  2756. MODULE_DEVICE_TABLE(pci, id_table);
  2757. static struct pci_driver es1371_driver = {
  2758. name: "es1371",
  2759. id_table: id_table,
  2760. probe: es1371_probe,
  2761. remove: es1371_remove
  2762. };
  2763. static int __init init_es1371(void)
  2764. {
  2765. if (!pci_present())   /* No PCI bus in this machine! */
  2766. return -ENODEV;
  2767. printk(KERN_INFO PFX "version v0.30 time " __TIME__ " " __DATE__ "n");
  2768. return pci_module_init(&es1371_driver);
  2769. }
  2770. static void __exit cleanup_es1371(void)
  2771. {
  2772. printk(KERN_INFO PFX "unloadingn");
  2773. pci_unregister_driver(&es1371_driver);
  2774. }
  2775. module_init(init_es1371);
  2776. module_exit(cleanup_es1371);
  2777. /* --------------------------------------------------------------------- */
  2778. #ifndef MODULE
  2779. /* format is: es1371=[joystick] */
  2780. static int __init es1371_setup(char *str)
  2781. {
  2782. static unsigned __initdata nr_dev = 0;
  2783. if (nr_dev >= NR_DEVICE)
  2784. return 0;
  2785. if (get_option(&str, &joystick[nr_dev]) == 2)
  2786. (void)get_option(&str, &spdif[nr_dev]);
  2787. nr_dev++;
  2788. return 1;
  2789. }
  2790. __setup("es1371=", es1371_setup);
  2791. #endif /* MODULE */