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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * sound/gus_wave.c
  3.  *
  4.  * Driver for the Gravis UltraSound wave table synth.
  5.  *
  6.  *
  7.  * Copyright (C) by Hannu Savolainen 1993-1997
  8.  *
  9.  * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
  10.  * Version 2 (June 1991). See the "COPYING" file distributed with this software
  11.  * for more info.
  12.  *
  13.  *
  14.  * Thomas Sailer    : ioctl code reworked (vmalloc/vfree removed)
  15.  * Frank van de Pol : Fixed GUS MAX interrupt handling. Enabled simultanious
  16.  *                    usage of CS4231A codec, GUS wave and MIDI for GUS MAX.
  17.  * Bartlomiej Zolnierkiewicz : added some __init/__exit
  18.  */
  19.  
  20. #include <linux/init.h> 
  21. #include <linux/config.h>
  22. #define GUSPNP_AUTODETECT
  23. #include "sound_config.h"
  24. #include <linux/ultrasound.h>
  25. #include "gus.h"
  26. #include "gus_hw.h"
  27. #define GUS_BANK_SIZE (((iw_mode) ? 256*1024*1024 : 256*1024))
  28. #define MAX_SAMPLE 150
  29. #define MAX_PATCH 256
  30. #define NOT_SAMPLE 0xffff
  31. struct voice_info
  32. {
  33. unsigned long   orig_freq;
  34. unsigned long   current_freq;
  35. unsigned long   mode;
  36. int             fixed_pitch;
  37. int             bender;
  38. int             bender_range;
  39. int             panning;
  40. int             midi_volume;
  41. unsigned int    initial_volume;
  42. unsigned int    current_volume;
  43. int             loop_irq_mode, loop_irq_parm;
  44. #define LMODE_FINISH 1
  45. #define LMODE_PCM 2
  46. #define LMODE_PCM_STOP 3
  47. int             volume_irq_mode, volume_irq_parm;
  48. #define VMODE_HALT 1
  49. #define VMODE_ENVELOPE 2
  50. #define VMODE_START_NOTE 3
  51. int             env_phase;
  52. unsigned char   env_rate[6];
  53. unsigned char   env_offset[6];
  54. /*
  55.  * Volume computation parameters for gus_adagio_vol()
  56.  */
  57. int main_vol, expression_vol, patch_vol;
  58. /* Variables for "Ultraclick" removal */
  59. int             dev_pending, note_pending, volume_pending,
  60.                 sample_pending;
  61. char            kill_pending;
  62. long            offset_pending;
  63. };
  64. static struct voice_alloc_info *voice_alloc;
  65. static struct address_info *gus_hw_config;
  66. extern int      gus_base;
  67. extern int      gus_irq, gus_dma;
  68. extern int      gus_pnp_flag;
  69. extern int      gus_no_wave_dma;
  70. static int      gus_dma2 = -1;
  71. static int      dual_dma_mode = 0;
  72. static long     gus_mem_size = 0;
  73. static long     free_mem_ptr = 0;
  74. static int      gus_busy = 0;
  75. static int      gus_no_dma = 0;
  76. static int      nr_voices = 0;
  77. static int      gus_devnum = 0;
  78. static int      volume_base, volume_scale, volume_method;
  79. static int      gus_recmask = SOUND_MASK_MIC;
  80. static int      recording_active = 0;
  81. static int      only_read_access = 0;
  82. static int      only_8_bits = 0;
  83. int             iw_mode = 0;
  84. int             gus_wave_volume = 60;
  85. int             gus_pcm_volume = 80;
  86. int             have_gus_max = 0;
  87. static int      gus_line_vol = 100, gus_mic_vol = 0;
  88. static unsigned char mix_image = 0x00;
  89. int             gus_timer_enabled = 0;
  90. /*
  91.  * Current version of this driver doesn't allow synth and PCM functions
  92.  * at the same time. The active_device specifies the active driver
  93.  */
  94. static int      active_device = 0;
  95. #define GUS_DEV_WAVE 1 /* Wave table synth */
  96. #define GUS_DEV_PCM_DONE 2 /* PCM device, transfer done */
  97. #define GUS_DEV_PCM_CONTINUE 3 /* PCM device, transfer done ch. 1/2 */
  98. static int      gus_audio_speed;
  99. static int      gus_audio_channels;
  100. static int      gus_audio_bits;
  101. static int      gus_audio_bsize;
  102. static char     bounce_buf[8 * 1024]; /* Must match value set to max_fragment */
  103. static DECLARE_WAIT_QUEUE_HEAD(dram_sleeper);
  104. /*
  105.  * Variables and buffers for PCM output
  106.  */
  107. #define MAX_PCM_BUFFERS (128*MAX_REALTIME_FACTOR) /* Don't change */
  108. static int      pcm_bsize, pcm_nblk, pcm_banksize;
  109. static int      pcm_datasize[MAX_PCM_BUFFERS];
  110. static volatile int pcm_head, pcm_tail, pcm_qlen;
  111. static volatile int pcm_active;
  112. static volatile int dma_active;
  113. static int      pcm_opened = 0;
  114. static int      pcm_current_dev;
  115. static int      pcm_current_block;
  116. static unsigned long pcm_current_buf;
  117. static int      pcm_current_count;
  118. static int      pcm_current_intrflag;
  119. extern int     *gus_osp;
  120. static struct voice_info voices[32];
  121. static int      freq_div_table[] =
  122. {
  123. 44100, /* 14 */
  124. 41160, /* 15 */
  125. 38587, /* 16 */
  126. 36317, /* 17 */
  127. 34300, /* 18 */
  128. 32494, /* 19 */
  129. 30870, /* 20 */
  130. 29400, /* 21 */
  131. 28063, /* 22 */
  132. 26843, /* 23 */
  133. 25725, /* 24 */
  134. 24696, /* 25 */
  135. 23746, /* 26 */
  136. 22866, /* 27 */
  137. 22050, /* 28 */
  138. 21289, /* 29 */
  139. 20580, /* 30 */
  140. 19916, /* 31 */
  141. 19293 /* 32 */
  142. };
  143. static struct patch_info *samples = NULL;
  144. static long     sample_ptrs[MAX_SAMPLE + 1];
  145. static int      sample_map[32];
  146. static int      free_sample;
  147. static int      mixer_type = 0;
  148. static int      patch_table[MAX_PATCH];
  149. static int      patch_map[32];
  150. static struct synth_info gus_info = {
  151. "Gravis UltraSound", 0, SYNTH_TYPE_SAMPLE, SAMPLE_TYPE_GUS, 
  152. 0, 16, 0, MAX_PATCH
  153. };
  154. static void     gus_poke(long addr, unsigned char data);
  155. static void     compute_and_set_volume(int voice, int volume, int ramp_time);
  156. extern unsigned short gus_adagio_vol(int vel, int mainv, int xpn, int voicev);
  157. extern unsigned short gus_linear_vol(int vol, int mainvol);
  158. static void     compute_volume(int voice, int volume);
  159. static void     do_volume_irq(int voice);
  160. static void     set_input_volumes(void);
  161. static void     gus_tmr_install(int io_base);
  162. #define INSTANT_RAMP -1 /* Instant change. No ramping */
  163. #define FAST_RAMP 0 /* Fastest possible ramp */
  164. static void reset_sample_memory(void)
  165. {
  166. int i;
  167. for (i = 0; i <= MAX_SAMPLE; i++)
  168. sample_ptrs[i] = -1;
  169. for (i = 0; i < 32; i++)
  170. sample_map[i] = -1;
  171. for (i = 0; i < 32; i++)
  172. patch_map[i] = -1;
  173. gus_poke(0, 0); /* Put a silent sample to the beginning */
  174. gus_poke(1, 0);
  175. free_mem_ptr = 2;
  176. free_sample = 0;
  177. for (i = 0; i < MAX_PATCH; i++)
  178. patch_table[i] = NOT_SAMPLE;
  179. }
  180. void gus_delay(void)
  181. {
  182. int i;
  183. for (i = 0; i < 7; i++)
  184. inb(u_DRAMIO);
  185. }
  186. static void gus_poke(long addr, unsigned char data)
  187. { /* Writes a byte to the DRAM */
  188. unsigned long   flags;
  189. save_flags(flags);
  190. cli();
  191. outb((0x43), u_Command);
  192. outb((addr & 0xff), u_DataLo);
  193. outb(((addr >> 8) & 0xff), u_DataHi);
  194. outb((0x44), u_Command);
  195. outb(((addr >> 16) & 0xff), u_DataHi);
  196. outb((data), u_DRAMIO);
  197. restore_flags(flags);
  198. }
  199. static unsigned char gus_peek(long addr)
  200. { /* Reads a byte from the DRAM */
  201. unsigned long   flags;
  202. unsigned char   tmp;
  203. save_flags(flags);
  204. cli();
  205. outb((0x43), u_Command);
  206. outb((addr & 0xff), u_DataLo);
  207. outb(((addr >> 8) & 0xff), u_DataHi);
  208. outb((0x44), u_Command);
  209. outb(((addr >> 16) & 0xff), u_DataHi);
  210. tmp = inb(u_DRAMIO);
  211. restore_flags(flags);
  212. return tmp;
  213. }
  214. void gus_write8(int reg, unsigned int data)
  215. { /* Writes to an indirect register (8 bit) */
  216. unsigned long   flags;
  217. save_flags(flags);
  218. cli();
  219. outb((reg), u_Command);
  220. outb(((unsigned char) (data & 0xff)), u_DataHi);
  221. restore_flags(flags);
  222. }
  223. static unsigned char gus_read8(int reg)
  224. {
  225. /* Reads from an indirect register (8 bit). Offset 0x80. */
  226. unsigned long   flags;
  227. unsigned char   val;
  228. save_flags(flags);
  229. cli();
  230. outb((reg | 0x80), u_Command);
  231. val = inb(u_DataHi);
  232. restore_flags(flags);
  233. return val;
  234. }
  235. static unsigned char gus_look8(int reg)
  236. {
  237. /* Reads from an indirect register (8 bit). No additional offset. */
  238. unsigned long   flags;
  239. unsigned char   val;
  240. save_flags(flags);
  241. cli();
  242. outb((reg), u_Command);
  243. val = inb(u_DataHi);
  244. restore_flags(flags);
  245. return val;
  246. }
  247. static void gus_write16(int reg, unsigned int data)
  248. {
  249. /* Writes to an indirect register (16 bit) */
  250. unsigned long   flags;
  251. save_flags(flags);
  252. cli();
  253. outb((reg), u_Command);
  254. outb(((unsigned char) (data & 0xff)), u_DataLo);
  255. outb(((unsigned char) ((data >> 8) & 0xff)), u_DataHi);
  256. restore_flags(flags);
  257. }
  258. static unsigned short gus_read16(int reg)
  259. {
  260. /* Reads from an indirect register (16 bit). Offset 0x80. */
  261. unsigned long   flags;
  262. unsigned char   hi, lo;
  263. save_flags(flags);
  264. cli();
  265. outb((reg | 0x80), u_Command);
  266. lo = inb(u_DataLo);
  267. hi = inb(u_DataHi);
  268. restore_flags(flags);
  269. return ((hi << 8) & 0xff00) | lo;
  270. }
  271. static unsigned short gus_look16(int reg)
  272. {
  273. /* Reads from an indirect register (16 bit). No additional offset. */
  274. unsigned long   flags;
  275. unsigned char   hi, lo;
  276. save_flags(flags);
  277. cli();
  278. outb((reg), u_Command);
  279. lo = inb(u_DataLo);
  280. hi = inb(u_DataHi);
  281. restore_flags(flags);
  282. return ((hi << 8) & 0xff00) | lo;
  283. }
  284. static void gus_write_addr(int reg, unsigned long address, int frac, int is16bit)
  285. {
  286. /* Writes an 24 bit memory address */
  287. unsigned long   hold_address;
  288. unsigned long   flags;
  289. save_flags(flags);
  290. cli();
  291. if (is16bit)
  292. {
  293. if (iw_mode)
  294. {
  295. /* Interwave spesific address translations */
  296. address >>= 1;
  297. }
  298. else
  299. {
  300. /*
  301.  * Special processing required for 16 bit patches
  302.  */
  303. hold_address = address;
  304. address = address >> 1;
  305. address &= 0x0001ffffL;
  306. address |= (hold_address & 0x000c0000L);
  307. }
  308. }
  309. gus_write16(reg, (unsigned short) ((address >> 7) & 0xffff));
  310. gus_write16(reg + 1, (unsigned short) ((address << 9) & 0xffff)
  311.     + (frac << 5));
  312. /* Could writing twice fix problems with GUS_VOICE_POS()? Let's try. */
  313. gus_delay();
  314. gus_write16(reg, (unsigned short) ((address >> 7) & 0xffff));
  315. gus_write16(reg + 1, (unsigned short) ((address << 9) & 0xffff)
  316.     + (frac << 5));
  317. restore_flags(flags);
  318. }
  319. static void gus_select_voice(int voice)
  320. {
  321. if (voice < 0 || voice > 31)
  322. return;
  323. outb((voice), u_Voice);
  324. }
  325. static void gus_select_max_voices(int nvoices)
  326. {
  327. if (iw_mode)
  328. nvoices = 32;
  329. if (nvoices < 14)
  330. nvoices = 14;
  331. if (nvoices > 32)
  332. nvoices = 32;
  333. voice_alloc->max_voice = nr_voices = nvoices;
  334. gus_write8(0x0e, (nvoices - 1) | 0xc0);
  335. }
  336. static void gus_voice_on(unsigned int mode)
  337. {
  338. gus_write8(0x00, (unsigned char) (mode & 0xfc));
  339. gus_delay();
  340. gus_write8(0x00, (unsigned char) (mode & 0xfc));
  341. }
  342. static void gus_voice_off(void)
  343. {
  344. gus_write8(0x00, gus_read8(0x00) | 0x03);
  345. }
  346. static void gus_voice_mode(unsigned int m)
  347. {
  348. unsigned char   mode = (unsigned char) (m & 0xff);
  349. gus_write8(0x00, (gus_read8(0x00) & 0x03) |
  350.    (mode & 0xfc)); /* Don't touch last two bits */
  351. gus_delay();
  352. gus_write8(0x00, (gus_read8(0x00) & 0x03) | (mode & 0xfc));
  353. }
  354. static void gus_voice_freq(unsigned long freq)
  355. {
  356. unsigned long   divisor = freq_div_table[nr_voices - 14];
  357. unsigned short  fc;
  358. /* Interwave plays at 44100 Hz with any number of voices */
  359. if (iw_mode)
  360. fc = (unsigned short) (((freq << 9) + (44100 >> 1)) / 44100);
  361. else
  362. fc = (unsigned short) (((freq << 9) + (divisor >> 1)) / divisor);
  363. fc = fc << 1;
  364. gus_write16(0x01, fc);
  365. }
  366. static void gus_voice_volume(unsigned int vol)
  367. {
  368. gus_write8(0x0d, 0x03); /* Stop ramp before setting volume */
  369. gus_write16(0x09, (unsigned short) (vol << 4));
  370. }
  371. static void gus_voice_balance(unsigned int balance)
  372. {
  373. gus_write8(0x0c, (unsigned char) (balance & 0xff));
  374. }
  375. static void gus_ramp_range(unsigned int low, unsigned int high)
  376. {
  377. gus_write8(0x07, (unsigned char) ((low >> 4) & 0xff));
  378. gus_write8(0x08, (unsigned char) ((high >> 4) & 0xff));
  379. }
  380. static void gus_ramp_rate(unsigned int scale, unsigned int rate)
  381. {
  382. gus_write8(0x06, (unsigned char) (((scale & 0x03) << 6) | (rate & 0x3f)));
  383. }
  384. static void gus_rampon(unsigned int m)
  385. {
  386. unsigned char   mode = (unsigned char) (m & 0xff);
  387. gus_write8(0x0d, mode & 0xfc);
  388. gus_delay();
  389. gus_write8(0x0d, mode & 0xfc);
  390. }
  391. static void gus_ramp_mode(unsigned int m)
  392. {
  393. unsigned char mode = (unsigned char) (m & 0xff);
  394. gus_write8(0x0d, (gus_read8(0x0d) & 0x03) |
  395.    (mode & 0xfc)); /* Leave the last 2 bits alone */
  396. gus_delay();
  397. gus_write8(0x0d, (gus_read8(0x0d) & 0x03) | (mode & 0xfc));
  398. }
  399. static void gus_rampoff(void)
  400. {
  401. gus_write8(0x0d, 0x03);
  402. }
  403. static void gus_set_voice_pos(int voice, long position)
  404. {
  405. int sample_no;
  406. if ((sample_no = sample_map[voice]) != -1) {
  407. if (position < samples[sample_no].len) {
  408. if (voices[voice].volume_irq_mode == VMODE_START_NOTE)
  409. voices[voice].offset_pending = position;
  410. else
  411. gus_write_addr(0x0a, sample_ptrs[sample_no] + position, 0,
  412.  samples[sample_no].mode & WAVE_16_BITS);
  413. }
  414. }
  415. }
  416. static void gus_voice_init(int voice)
  417. {
  418. unsigned long   flags;
  419. save_flags(flags);
  420. cli();
  421. gus_select_voice(voice);
  422. gus_voice_volume(0);
  423. gus_voice_off();
  424. gus_write_addr(0x0a, 0, 0, 0); /* Set current position to 0 */
  425. gus_write8(0x00, 0x03); /* Voice off */
  426. gus_write8(0x0d, 0x03); /* Ramping off */
  427. voice_alloc->map[voice] = 0;
  428. voice_alloc->alloc_times[voice] = 0;
  429. restore_flags(flags);
  430. }
  431. static void gus_voice_init2(int voice)
  432. {
  433. voices[voice].panning = 0;
  434. voices[voice].mode = 0;
  435. voices[voice].orig_freq = 20000;
  436. voices[voice].current_freq = 20000;
  437. voices[voice].bender = 0;
  438. voices[voice].bender_range = 200;
  439. voices[voice].initial_volume = 0;
  440. voices[voice].current_volume = 0;
  441. voices[voice].loop_irq_mode = 0;
  442. voices[voice].loop_irq_parm = 0;
  443. voices[voice].volume_irq_mode = 0;
  444. voices[voice].volume_irq_parm = 0;
  445. voices[voice].env_phase = 0;
  446. voices[voice].main_vol = 127;
  447. voices[voice].patch_vol = 127;
  448. voices[voice].expression_vol = 127;
  449. voices[voice].sample_pending = -1;
  450. voices[voice].fixed_pitch = 0;
  451. }
  452. static void step_envelope(int voice)
  453. {
  454. unsigned        vol, prev_vol, phase;
  455. unsigned char   rate;
  456. long int        flags;
  457. if (voices[voice].mode & WAVE_SUSTAIN_ON && voices[voice].env_phase == 2)
  458. {
  459. save_flags(flags);
  460. cli();
  461. gus_select_voice(voice);
  462. gus_rampoff();
  463. restore_flags(flags);
  464. return;
  465. /*
  466.  * Sustain phase begins. Continue envelope after receiving note off.
  467.  */
  468. }
  469. if (voices[voice].env_phase >= 5)
  470. {
  471. /* Envelope finished. Shoot the voice down */
  472. gus_voice_init(voice);
  473. return;
  474. }
  475. prev_vol = voices[voice].current_volume;
  476. phase = ++voices[voice].env_phase;
  477. compute_volume(voice, voices[voice].midi_volume);
  478. vol = voices[voice].initial_volume * voices[voice].env_offset[phase] / 255;
  479. rate = voices[voice].env_rate[phase];
  480. save_flags(flags);
  481. cli();
  482. gus_select_voice(voice);
  483. gus_voice_volume(prev_vol);
  484. gus_write8(0x06, rate); /* Ramping rate */
  485. voices[voice].volume_irq_mode = VMODE_ENVELOPE;
  486. if (((vol - prev_vol) / 64) == 0) /* No significant volume change */
  487. {
  488. restore_flags(flags);
  489. step_envelope(voice); /* Continue the envelope on the next step */
  490. return;
  491. }
  492. if (vol > prev_vol)
  493. {
  494. if (vol >= (4096 - 64))
  495. vol = 4096 - 65;
  496. gus_ramp_range(0, vol);
  497. gus_rampon(0x20); /* Increasing volume, with IRQ */
  498. }
  499. else
  500. {
  501. if (vol <= 64)
  502. vol = 65;
  503. gus_ramp_range(vol, 4030);
  504. gus_rampon(0x60); /* Decreasing volume, with IRQ */
  505. }
  506. voices[voice].current_volume = vol;
  507. restore_flags(flags);
  508. }
  509. static void init_envelope(int voice)
  510. {
  511. voices[voice].env_phase = -1;
  512. voices[voice].current_volume = 64;
  513. step_envelope(voice);
  514. }
  515. static void start_release(int voice, long int flags)
  516. {
  517. if (gus_read8(0x00) & 0x03)
  518. return; /* Voice already stopped */
  519. voices[voice].env_phase = 2; /* Will be incremented by step_envelope */
  520. voices[voice].current_volume = voices[voice].initial_volume =
  521. gus_read16(0x09) >> 4; /* Get current volume */
  522. voices[voice].mode &= ~WAVE_SUSTAIN_ON;
  523. gus_rampoff();
  524. restore_flags(flags);
  525. step_envelope(voice);
  526. }
  527. static void gus_voice_fade(int voice)
  528. {
  529. int instr_no = sample_map[voice], is16bits;
  530. long int flags;
  531. save_flags(flags);
  532. cli();
  533. gus_select_voice(voice);
  534. if (instr_no < 0 || instr_no > MAX_SAMPLE)
  535. {
  536. gus_write8(0x00, 0x03); /* Hard stop */
  537. voice_alloc->map[voice] = 0;
  538. restore_flags(flags);
  539. return;
  540. }
  541. is16bits = (samples[instr_no].mode & WAVE_16_BITS) ? 1 : 0; /* 8 or 16 bits */
  542. if (voices[voice].mode & WAVE_ENVELOPES)
  543. {
  544. start_release(voice, flags);
  545. restore_flags(flags);
  546. return;
  547. }
  548. /*
  549.  * Ramp the volume down but not too quickly.
  550.  */
  551. if ((int) (gus_read16(0x09) >> 4) < 100) /* Get current volume */
  552. {
  553. gus_voice_off();
  554. gus_rampoff();
  555. gus_voice_init(voice);
  556. restore_flags(flags);
  557. return;
  558. }
  559. gus_ramp_range(65, 4030);
  560. gus_ramp_rate(2, 4);
  561. gus_rampon(0x40 | 0x20); /* Down, once, with IRQ */
  562. voices[voice].volume_irq_mode = VMODE_HALT;
  563. restore_flags(flags);
  564. }
  565. static void gus_reset(void)
  566. {
  567. int i;
  568. gus_select_max_voices(24);
  569. volume_base = 3071;
  570. volume_scale = 4;
  571. volume_method = VOL_METHOD_ADAGIO;
  572. for (i = 0; i < 32; i++)
  573. {
  574. gus_voice_init(i); /* Turn voice off */
  575. gus_voice_init2(i);
  576. }
  577. }
  578. static void gus_initialize(void)
  579. {
  580. unsigned long flags;
  581. unsigned char dma_image, irq_image, tmp;
  582. static unsigned char gus_irq_map[16] =  {
  583. 0, 0, 0, 3, 0, 2, 0, 4, 0, 1, 0, 5, 6, 0, 0, 7
  584. };
  585. static unsigned char gus_dma_map[8] = {
  586. 0, 1, 0, 2, 0, 3, 4, 5
  587. };
  588. save_flags(flags);
  589. cli();
  590. gus_write8(0x4c, 0); /* Reset GF1 */
  591. gus_delay();
  592. gus_delay();
  593. gus_write8(0x4c, 1); /* Release Reset */
  594. gus_delay();
  595. gus_delay();
  596. /*
  597.  * Clear all interrupts
  598.  */
  599. gus_write8(0x41, 0); /* DMA control */
  600. gus_write8(0x45, 0); /* Timer control */
  601. gus_write8(0x49, 0); /* Sample control */
  602. gus_select_max_voices(24);
  603. inb(u_Status); /* Touch the status register */
  604. gus_look8(0x41); /* Clear any pending DMA IRQs */
  605. gus_look8(0x49); /* Clear any pending sample IRQs */
  606. gus_read8(0x0f); /* Clear pending IRQs */
  607. gus_reset(); /* Resets all voices */
  608. gus_look8(0x41); /* Clear any pending DMA IRQs */
  609. gus_look8(0x49); /* Clear any pending sample IRQs */
  610. gus_read8(0x0f); /* Clear pending IRQs */
  611. gus_write8(0x4c, 7); /* Master reset | DAC enable | IRQ enable */
  612. /*
  613.  * Set up for Digital ASIC
  614.  */
  615. outb((0x05), gus_base + 0x0f);
  616. mix_image |= 0x02; /* Disable line out (for a moment) */
  617. outb((mix_image), u_Mixer);
  618. outb((0x00), u_IRQDMAControl);
  619. outb((0x00), gus_base + 0x0f);
  620. /*
  621.  * Now set up the DMA and IRQ interface
  622.  *
  623.  * The GUS supports two IRQs and two DMAs.
  624.  *
  625.  * Just one DMA channel is used. This prevents simultaneous ADC and DAC.
  626.  * Adding this support requires significant changes to the dmabuf.c, dsp.c
  627.  * and audio.c also.
  628.  */
  629. irq_image = 0;
  630. tmp = gus_irq_map[gus_irq];
  631. if (!gus_pnp_flag && !tmp)
  632. printk(KERN_WARNING "Warning! GUS IRQ not selectedn");
  633. irq_image |= tmp;
  634. irq_image |= 0x40; /* Combine IRQ1 (GF1) and IRQ2 (Midi) */
  635. dual_dma_mode = 1;
  636. if (gus_dma2 == gus_dma || gus_dma2 == -1)
  637. {
  638. dual_dma_mode = 0;
  639. dma_image = 0x40; /* Combine DMA1 (DRAM) and IRQ2 (ADC) */
  640. tmp = gus_dma_map[gus_dma];
  641. if (!tmp)
  642. printk(KERN_WARNING "Warning! GUS DMA not selectedn");
  643. dma_image |= tmp;
  644. }
  645. else
  646. {
  647. /* Setup dual DMA channel mode for GUS MAX */
  648. dma_image = gus_dma_map[gus_dma];
  649. if (!dma_image)
  650. printk(KERN_WARNING "Warning! GUS DMA not selectedn");
  651. tmp = gus_dma_map[gus_dma2] << 3;
  652. if (!tmp)
  653. {
  654. printk(KERN_WARNING "Warning! Invalid GUS MAX DMAn");
  655. tmp = 0x40; /* Combine DMA channels */
  656.     dual_dma_mode = 0;
  657. }
  658. dma_image |= tmp;
  659. }
  660. /*
  661.  * For some reason the IRQ and DMA addresses must be written twice
  662.  */
  663. /*
  664.  * Doing it first time
  665.  */
  666. outb((mix_image), u_Mixer); /* Select DMA control */
  667. outb((dma_image | 0x80), u_IRQDMAControl); /* Set DMA address */
  668. outb((mix_image | 0x40), u_Mixer); /* Select IRQ control */
  669. outb((irq_image), u_IRQDMAControl); /* Set IRQ address */
  670. /*
  671.  * Doing it second time
  672.  */
  673. outb((mix_image), u_Mixer); /* Select DMA control */
  674. outb((dma_image), u_IRQDMAControl); /* Set DMA address */
  675. outb((mix_image | 0x40), u_Mixer); /* Select IRQ control */
  676. outb((irq_image), u_IRQDMAControl); /* Set IRQ address */
  677. gus_select_voice(0); /* This disables writes to IRQ/DMA reg */
  678. mix_image &= ~0x02; /* Enable line out */
  679. mix_image |= 0x08; /* Enable IRQ */
  680. outb((mix_image), u_Mixer); /*
  681.  * Turn mixer channels on
  682.  * Note! Mic in is left off.
  683.  */
  684. gus_select_voice(0); /* This disables writes to IRQ/DMA reg */
  685. gusintr(gus_irq, (void *)gus_hw_config, NULL); /* Serve pending interrupts */
  686. inb(u_Status); /* Touch the status register */
  687. gus_look8(0x41); /* Clear any pending DMA IRQs */
  688. gus_look8(0x49); /* Clear any pending sample IRQs */
  689. gus_read8(0x0f); /* Clear pending IRQs */
  690. if (iw_mode)
  691. gus_write8(0x19, gus_read8(0x19) | 0x01);
  692. restore_flags(flags);
  693. }
  694. static void __init pnp_mem_init(void)
  695. {
  696. #include "iwmem.h"
  697. #define CHUNK_SIZE (256*1024)
  698. #define BANK_SIZE (4*1024*1024)
  699. #define CHUNKS_PER_BANK (BANK_SIZE/CHUNK_SIZE)
  700. int bank, chunk, addr, total = 0;
  701. int bank_sizes[4];
  702. int i, j, bits = -1, testbits = -1, nbanks = 0;
  703. /*
  704.  * This routine determines what kind of RAM is installed in each of the four
  705.  * SIMM banks and configures the DRAM address decode logic accordingly.
  706.  */
  707. /*
  708.  *    Place the chip into enhanced mode
  709.  */
  710. gus_write8(0x19, gus_read8(0x19) | 0x01);
  711. gus_write8(0x53, gus_look8(0x53) & ~0x02); /* Select DRAM I/O access */
  712. /*
  713.  * Set memory configuration to 4 DRAM banks of 4M in each (16M total).
  714.  */
  715. gus_write16(0x52, (gus_look16(0x52) & 0xfff0) | 0x000c);
  716. /*
  717.  * Perform the DRAM size detection for each bank individually.
  718.  */
  719. for (bank = 0; bank < 4; bank++)
  720. {
  721. int size = 0;
  722. addr = bank * BANK_SIZE;
  723. /* Clean check points of each chunk */
  724. for (chunk = 0; chunk < CHUNKS_PER_BANK; chunk++)
  725. {
  726. gus_poke(addr + chunk * CHUNK_SIZE + 0L, 0x00);
  727. gus_poke(addr + chunk * CHUNK_SIZE + 1L, 0x00);
  728. }
  729. /* Write a value to each chunk point and verify the result */
  730. for (chunk = 0; chunk < CHUNKS_PER_BANK; chunk++)
  731. {
  732. gus_poke(addr + chunk * CHUNK_SIZE + 0L, 0x55);
  733. gus_poke(addr + chunk * CHUNK_SIZE + 1L, 0xAA);
  734. if (gus_peek(addr + chunk * CHUNK_SIZE + 0L) == 0x55 &&
  735. gus_peek(addr + chunk * CHUNK_SIZE + 1L) == 0xAA)
  736. {
  737. /* OK. There is RAM. Now check for possible shadows */
  738. int ok = 1, chunk2;
  739. for (chunk2 = 0; ok && chunk2 < chunk; chunk2++)
  740. if (gus_peek(addr + chunk2 * CHUNK_SIZE + 0L) ||
  741. gus_peek(addr + chunk2 * CHUNK_SIZE + 1L))
  742. ok = 0; /* Addressing wraps */
  743. if (ok)
  744. size = (chunk + 1) * CHUNK_SIZE;
  745. }
  746. gus_poke(addr + chunk * CHUNK_SIZE + 0L, 0x00);
  747. gus_poke(addr + chunk * CHUNK_SIZE + 1L, 0x00);
  748. }
  749. bank_sizes[bank] = size;
  750. if (size)
  751. nbanks = bank + 1;
  752. DDB(printk("Interwave: Bank %d, size=%dkn", bank, size / 1024));
  753. }
  754. if (nbanks == 0) /* No RAM - Give up */
  755. {
  756. printk(KERN_ERR "Sound: An Interwave audio chip detected but no DRAMn");
  757. printk(KERN_ERR "Sound: Unable to work with this card.n");
  758. gus_write8(0x19, gus_read8(0x19) & ~0x01);
  759. gus_mem_size = 0;
  760. return;
  761. }
  762. /*
  763.  * Now we know how much DRAM there is in each bank. The next step is
  764.  * to find a DRAM size encoding (0 to 12) which is best for the combination
  765.  * we have.
  766.  *
  767.  * First try if any of the possible alternatives matches exactly the amount
  768.  * of memory we have.
  769.  */
  770. for (i = 0; bits == -1 && i < 13; i++)
  771. {
  772. bits = i;
  773. for (j = 0; bits != -1 && j < 4; j++)
  774. if (mem_decode[i][j] != bank_sizes[j])
  775. bits = -1; /* No hit */
  776. }
  777. /*
  778.  * If necessary, try to find a combination where other than the last
  779.  * bank matches our configuration and the last bank is left oversized.
  780.  * In this way we don't leave holes in the middle of memory.
  781.  */
  782. if (bits == -1) /* No luck yet */
  783. {
  784. for (i = 0; bits == -1 && i < 13; i++)
  785. {
  786. bits = i;
  787. for (j = 0; bits != -1 && j < nbanks - 1; j++)
  788. if (mem_decode[i][j] != bank_sizes[j])
  789. bits = -1; /* No hit */
  790. if (mem_decode[i][nbanks - 1] < bank_sizes[nbanks - 1])
  791. bits = -1; /* The last bank is too small */
  792. }
  793. }
  794. /*
  795.    * The last resort is to search for a combination where the banks are
  796.    * smaller than the actual SIMMs. This leaves some memory in the banks
  797.    * unused but doesn't leave holes in the DRAM address space.
  798.    */
  799.   if (bits == -1) /* No luck yet */
  800.   {
  801.   for (i = 0; i < 13; i++)
  802.   {
  803.   testbits = i;
  804.   for (j = 0; testbits != -1 && j < nbanks - 1; j++)
  805.   if (mem_decode[i][j] > bank_sizes[j]) {
  806.   testbits = -1;
  807.   }
  808.   if(testbits > bits) bits = testbits;
  809.   }
  810.   if (bits != -1)
  811.   {
  812. printk(KERN_INFO "Interwave: Can't use all installed RAM.n");
  813. printk(KERN_INFO "Interwave: Try reordering SIMMS.n");
  814. }
  815. printk(KERN_INFO "Interwave: Can't find working DRAM encoding.n");
  816. printk(KERN_INFO "Interwave: Defaulting to 256k. Try reordering SIMMS.n");
  817. bits = 0;
  818. }
  819. DDB(printk("Interwave: Selecting DRAM addressing mode %dn", bits));
  820. for (bank = 0; bank < 4; bank++)
  821. {
  822. DDB(printk("  Bank %d, mem=%dk (limit %dk)n", bank, bank_sizes[bank] / 1024, mem_decode[bits][bank] / 1024));
  823. if (bank_sizes[bank] > mem_decode[bits][bank])
  824. total += mem_decode[bits][bank];
  825. else
  826. total += bank_sizes[bank];
  827. }
  828. DDB(printk("Total %dk of DRAM (enhanced mode)n", total / 1024));
  829. /*
  830.  *    Set the memory addressing mode.
  831.  */
  832. gus_write16(0x52, (gus_look16(0x52) & 0xfff0) | bits);
  833. /*      Leave the chip into enhanced mode. Disable LFO  */
  834. gus_mem_size = total;
  835. iw_mode = 1;
  836. gus_write8(0x19, (gus_read8(0x19) | 0x01) & ~0x02);
  837. }
  838. int __init gus_wave_detect(int baseaddr)
  839. {
  840. unsigned long   i, max_mem = 1024L;
  841. unsigned long   loc;
  842. unsigned char   val;
  843. gus_base = baseaddr;
  844. gus_write8(0x4c, 0); /* Reset GF1 */
  845. gus_delay();
  846. gus_delay();
  847. gus_write8(0x4c, 1); /* Release Reset */
  848. gus_delay();
  849. gus_delay();
  850. #ifdef GUSPNP_AUTODETECT
  851. val = gus_look8(0x5b); /* Version number register */
  852. gus_write8(0x5b, ~val); /* Invert all bits */
  853. if ((gus_look8(0x5b) & 0xf0) == (val & 0xf0)) /* No change */
  854. {
  855. if ((gus_look8(0x5b) & 0x0f) == ((~val) & 0x0f)) /* Change */
  856. {
  857. DDB(printk("Interwave chip version %d detectedn", (val & 0xf0) >> 4));
  858. gus_pnp_flag = 1;
  859. }
  860. else
  861. {
  862. DDB(printk("Not an Interwave chip (%x)n", gus_look8(0x5b)));
  863. gus_pnp_flag = 0;
  864. }
  865. }
  866. gus_write8(0x5b, val); /* Restore all bits */
  867. #endif
  868. if (gus_pnp_flag)
  869. pnp_mem_init();
  870. if (iw_mode)
  871. return 1;
  872. /* See if there is first block there.... */
  873. gus_poke(0L, 0xaa);
  874. if (gus_peek(0L) != 0xaa)
  875. return (0);
  876. /* Now zero it out so that I can check for mirroring .. */
  877. gus_poke(0L, 0x00);
  878. for (i = 1L; i < max_mem; i++)
  879. {
  880. int n, failed;
  881. /* check for mirroring ... */
  882. if (gus_peek(0L) != 0)
  883. break;
  884. loc = i << 10;
  885. for (n = loc - 1, failed = 0; n <= loc; n++)
  886. {
  887. gus_poke(loc, 0xaa);
  888. if (gus_peek(loc) != 0xaa)
  889. failed = 1;
  890. gus_poke(loc, 0x55);
  891. if (gus_peek(loc) != 0x55)
  892. failed = 1;
  893. }
  894. if (failed)
  895. break;
  896. }
  897. gus_mem_size = i << 10;
  898. return 1;
  899. }
  900. static int guswave_ioctl(int dev, unsigned int cmd, caddr_t arg)
  901. {
  902. switch (cmd) 
  903. {
  904. case SNDCTL_SYNTH_INFO:
  905. gus_info.nr_voices = nr_voices;
  906. if (copy_to_user(arg, &gus_info, sizeof(gus_info)))
  907. return -EFAULT;
  908. return 0;
  909. case SNDCTL_SEQ_RESETSAMPLES:
  910. reset_sample_memory();
  911. return 0;
  912. case SNDCTL_SEQ_PERCMODE:
  913. return 0;
  914. case SNDCTL_SYNTH_MEMAVL:
  915. return (gus_mem_size == 0) ? 0 : gus_mem_size - free_mem_ptr - 32;
  916. default:
  917. return -EINVAL;
  918. }
  919. }
  920. static int guswave_set_instr(int dev, int voice, int instr_no)
  921. {
  922. int sample_no;
  923. if (instr_no < 0 || instr_no > MAX_PATCH)
  924. instr_no = 0; /* Default to acoustic piano */
  925. if (voice < 0 || voice > 31)
  926. return -EINVAL;
  927. if (voices[voice].volume_irq_mode == VMODE_START_NOTE)
  928. {
  929. voices[voice].sample_pending = instr_no;
  930. return 0;
  931. }
  932. sample_no = patch_table[instr_no];
  933. patch_map[voice] = -1;
  934. if (sample_no == NOT_SAMPLE)
  935. {
  936. /* printk("GUS: Undefined patch %d for voice %dn", instr_no, voice);*/
  937. return -EINVAL; /* Patch not defined */
  938. }
  939. if (sample_ptrs[sample_no] == -1) /* Sample not loaded */
  940. {
  941. /* printk("GUS: Sample #%d not loaded for patch %d (voice %d)n", sample_no, instr_no, voice);*/
  942. return -EINVAL;
  943. }
  944. sample_map[voice] = sample_no;
  945. patch_map[voice] = instr_no;
  946. return 0;
  947. }
  948. static int guswave_kill_note(int dev, int voice, int note, int velocity)
  949. {
  950. unsigned long flags;
  951. save_flags(flags);
  952. cli();
  953. /* voice_alloc->map[voice] = 0xffff; */
  954. if (voices[voice].volume_irq_mode == VMODE_START_NOTE)
  955. {
  956. voices[voice].kill_pending = 1;
  957. restore_flags(flags);
  958. }
  959. else
  960. {
  961. restore_flags(flags);
  962. gus_voice_fade(voice);
  963. }
  964. return 0;
  965. }
  966. static void guswave_aftertouch(int dev, int voice, int pressure)
  967. {
  968. }
  969. static void guswave_panning(int dev, int voice, int value)
  970. {
  971. if (voice >= 0 || voice < 32)
  972. voices[voice].panning = value;
  973. }
  974. static void guswave_volume_method(int dev, int mode)
  975. {
  976. if (mode == VOL_METHOD_LINEAR || mode == VOL_METHOD_ADAGIO)
  977. volume_method = mode;
  978. }
  979. static void compute_volume(int voice, int volume)
  980. {
  981. if (volume < 128)
  982. voices[voice].midi_volume = volume;
  983. switch (volume_method)
  984. {
  985. case VOL_METHOD_ADAGIO:
  986. voices[voice].initial_volume =
  987. gus_adagio_vol(voices[voice].midi_volume, voices[voice].main_vol,
  988. voices[voice].expression_vol,
  989. voices[voice].patch_vol);
  990. break;
  991. case VOL_METHOD_LINEAR: /* Totally ignores patch-volume and expression */
  992. voices[voice].initial_volume = gus_linear_vol(volume, voices[voice].main_vol);
  993. break;
  994. default:
  995. voices[voice].initial_volume = volume_base +
  996. (voices[voice].midi_volume * volume_scale);
  997. }
  998. if (voices[voice].initial_volume > 4030)
  999. voices[voice].initial_volume = 4030;
  1000. }
  1001. static void compute_and_set_volume(int voice, int volume, int ramp_time)
  1002. {
  1003. int curr, target, rate;
  1004. unsigned long flags;
  1005. compute_volume(voice, volume);
  1006. voices[voice].current_volume = voices[voice].initial_volume;
  1007. save_flags(flags);
  1008. cli();
  1009. /*
  1010.  * CAUTION! Interrupts disabled. Enable them before returning
  1011.  */
  1012. gus_select_voice(voice);
  1013. curr = gus_read16(0x09) >> 4;
  1014. target = voices[voice].initial_volume;
  1015. if (ramp_time == INSTANT_RAMP)
  1016. {
  1017. gus_rampoff();
  1018. gus_voice_volume(target);
  1019. restore_flags(flags);
  1020. return;
  1021. }
  1022. if (ramp_time == FAST_RAMP)
  1023. rate = 63;
  1024. else
  1025. rate = 16;
  1026. gus_ramp_rate(0, rate);
  1027. if ((target - curr) / 64 == 0) /* Close enough to target. */
  1028. {
  1029. gus_rampoff();
  1030. gus_voice_volume(target);
  1031. restore_flags(flags);
  1032. return;
  1033. }
  1034. if (target > curr)
  1035. {
  1036. if (target > (4095 - 65))
  1037. target = 4095 - 65;
  1038. gus_ramp_range(curr, target);
  1039. gus_rampon(0x00); /* Ramp up, once, no IRQ */
  1040. }
  1041. else
  1042. {
  1043. if (target < 65)
  1044. target = 65;
  1045. gus_ramp_range(target, curr);
  1046. gus_rampon(0x40); /* Ramp down, once, no irq */
  1047. }
  1048. restore_flags(flags);
  1049. }
  1050. static void dynamic_volume_change(int voice)
  1051. {
  1052. unsigned char status;
  1053. unsigned long flags;
  1054. save_flags(flags);
  1055. cli();
  1056. gus_select_voice(voice);
  1057. status = gus_read8(0x00); /* Get voice status */
  1058. restore_flags(flags);
  1059. if (status & 0x03)
  1060. return; /* Voice was not running */
  1061. if (!(voices[voice].mode & WAVE_ENVELOPES))
  1062. {
  1063. compute_and_set_volume(voice, voices[voice].midi_volume, 1);
  1064. return;
  1065. }
  1066. /*
  1067.  * Voice is running and has envelopes.
  1068.  */
  1069. save_flags(flags);
  1070. cli();
  1071. gus_select_voice(voice);
  1072. status = gus_read8(0x0d); /* Ramping status */
  1073. restore_flags(flags);
  1074. if (status & 0x03) /* Sustain phase? */
  1075. {
  1076. compute_and_set_volume(voice, voices[voice].midi_volume, 1);
  1077. return;
  1078. }
  1079. if (voices[voice].env_phase < 0)
  1080. return;
  1081. compute_volume(voice, voices[voice].midi_volume);
  1082. }
  1083. static void guswave_controller(int dev, int voice, int ctrl_num, int value)
  1084. {
  1085. unsigned long   flags;
  1086. unsigned long   freq;
  1087. if (voice < 0 || voice > 31)
  1088. return;
  1089. switch (ctrl_num)
  1090. {
  1091. case CTRL_PITCH_BENDER:
  1092. voices[voice].bender = value;
  1093. if (voices[voice].volume_irq_mode != VMODE_START_NOTE)
  1094. {
  1095. freq = compute_finetune(voices[voice].orig_freq, value, voices[voice].bender_range, 0);
  1096. voices[voice].current_freq = freq;
  1097. save_flags(flags);
  1098. cli();
  1099. gus_select_voice(voice);
  1100. gus_voice_freq(freq);
  1101. restore_flags(flags);
  1102. }
  1103. break;
  1104. case CTRL_PITCH_BENDER_RANGE:
  1105. voices[voice].bender_range = value;
  1106. break;
  1107. case CTL_EXPRESSION:
  1108. value /= 128;
  1109. case CTRL_EXPRESSION:
  1110. if (volume_method == VOL_METHOD_ADAGIO)
  1111. {
  1112. voices[voice].expression_vol = value;
  1113. if (voices[voice].volume_irq_mode != VMODE_START_NOTE)
  1114. dynamic_volume_change(voice);
  1115. }
  1116. break;
  1117. case CTL_PAN:
  1118. voices[voice].panning = (value * 2) - 128;
  1119. break;
  1120. case CTL_MAIN_VOLUME:
  1121. value = (value * 100) / 16383;
  1122. case CTRL_MAIN_VOLUME:
  1123. voices[voice].main_vol = value;
  1124. if (voices[voice].volume_irq_mode != VMODE_START_NOTE)
  1125. dynamic_volume_change(voice);
  1126. break;
  1127. default:
  1128. break;
  1129. }
  1130. }
  1131. static int guswave_start_note2(int dev, int voice, int note_num, int volume)
  1132. {
  1133. int sample, best_sample, best_delta, delta_freq;
  1134. int is16bits, samplep, patch, pan;
  1135. unsigned long   note_freq, base_note, freq, flags;
  1136. unsigned char   mode = 0;
  1137. if (voice < 0 || voice > 31)
  1138. {
  1139. /* printk("GUS: Invalid voicen");*/
  1140. return -EINVAL;
  1141. }
  1142. if (note_num == 255)
  1143. {
  1144. if (voices[voice].mode & WAVE_ENVELOPES)
  1145. {
  1146. voices[voice].midi_volume = volume;
  1147. dynamic_volume_change(voice);
  1148. return 0;
  1149. }
  1150. compute_and_set_volume(voice, volume, 1);
  1151. return 0;
  1152. }
  1153. if ((patch = patch_map[voice]) == -1)
  1154. return -EINVAL;
  1155. if ((samplep = patch_table[patch]) == NOT_SAMPLE)
  1156. {
  1157. return -EINVAL;
  1158. }
  1159. note_freq = note_to_freq(note_num);
  1160. /*
  1161.  * Find a sample within a patch so that the note_freq is between low_note
  1162.  * and high_note.
  1163.  */
  1164. sample = -1;
  1165. best_sample = samplep;
  1166. best_delta = 1000000;
  1167. while (samplep != 0 && samplep != NOT_SAMPLE && sample == -1)
  1168. {
  1169. delta_freq = note_freq - samples[samplep].base_note;
  1170. if (delta_freq < 0)
  1171. delta_freq = -delta_freq;
  1172. if (delta_freq < best_delta)
  1173. {
  1174. best_sample = samplep;
  1175. best_delta = delta_freq;
  1176. }
  1177. if (samples[samplep].low_note <= note_freq &&
  1178. note_freq <= samples[samplep].high_note)
  1179. {
  1180. sample = samplep;
  1181. }
  1182. else
  1183. samplep = samples[samplep].key; /* Link to next sample */
  1184.   }
  1185. if (sample == -1)
  1186. sample = best_sample;
  1187. if (sample == -1)
  1188. {
  1189. /* printk("GUS: Patch %d not defined for note %dn", patch, note_num);*/
  1190. return 0; /* Should play default patch ??? */
  1191. }
  1192. is16bits = (samples[sample].mode & WAVE_16_BITS) ? 1 : 0;
  1193. voices[voice].mode = samples[sample].mode;
  1194. voices[voice].patch_vol = samples[sample].volume;
  1195. if (iw_mode)
  1196. gus_write8(0x15, 0x00); /* RAM, Reset voice deactivate bit of SMSI */
  1197. if (voices[voice].mode & WAVE_ENVELOPES)
  1198. {
  1199. int i;
  1200. for (i = 0; i < 6; i++)
  1201. {
  1202. voices[voice].env_rate[i] = samples[sample].env_rate[i];
  1203. voices[voice].env_offset[i] = samples[sample].env_offset[i];
  1204. }
  1205. }
  1206. sample_map[voice] = sample;
  1207. if (voices[voice].fixed_pitch) /* Fixed pitch */
  1208. {
  1209.   freq = samples[sample].base_freq;
  1210. }
  1211. else
  1212. {
  1213. base_note = samples[sample].base_note / 100;
  1214. note_freq /= 100;
  1215. freq = samples[sample].base_freq * note_freq / base_note;
  1216. }
  1217. voices[voice].orig_freq = freq;
  1218. /*
  1219.  * Since the pitch bender may have been set before playing the note, we
  1220.  * have to calculate the bending now.
  1221.  */
  1222. freq = compute_finetune(voices[voice].orig_freq, voices[voice].bender,
  1223. voices[voice].bender_range, 0);
  1224. voices[voice].current_freq = freq;
  1225. pan = (samples[sample].panning + voices[voice].panning) / 32;
  1226. pan += 7;
  1227. if (pan < 0)
  1228. pan = 0;
  1229. if (pan > 15)
  1230. pan = 15;
  1231. if (samples[sample].mode & WAVE_16_BITS)
  1232. {
  1233. mode |= 0x04; /* 16 bits */
  1234. if ((sample_ptrs[sample] / GUS_BANK_SIZE) !=
  1235. ((sample_ptrs[sample] + samples[sample].len) / GUS_BANK_SIZE))
  1236. printk(KERN_ERR "GUS: Sample address errorn");
  1237. }
  1238. /*************************************************************************
  1239.  *    CAUTION!        Interrupts disabled. Don't return before enabling
  1240.  *************************************************************************/
  1241. save_flags(flags);
  1242. cli();
  1243. gus_select_voice(voice);
  1244. gus_voice_off();
  1245. gus_rampoff();
  1246. restore_flags(flags);
  1247. if (voices[voice].mode & WAVE_ENVELOPES)
  1248. {
  1249. compute_volume(voice, volume);
  1250. init_envelope(voice);
  1251. }
  1252. else
  1253. {
  1254. compute_and_set_volume(voice, volume, 0);
  1255. }
  1256. save_flags(flags);
  1257. cli();
  1258. gus_select_voice(voice);
  1259. if (samples[sample].mode & WAVE_LOOP_BACK)
  1260. gus_write_addr(0x0a, sample_ptrs[sample] + samples[sample].len -
  1261. voices[voice].offset_pending, 0, is16bits); /* start=end */
  1262. else
  1263. gus_write_addr(0x0a, sample_ptrs[sample] + voices[voice].offset_pending, 0, is16bits); /* Sample start=begin */
  1264. if (samples[sample].mode & WAVE_LOOPING)
  1265. {
  1266. mode |= 0x08;
  1267. if (samples[sample].mode & WAVE_BIDIR_LOOP)
  1268. mode |= 0x10;
  1269. if (samples[sample].mode & WAVE_LOOP_BACK)
  1270. {
  1271. gus_write_addr(0x0a, sample_ptrs[sample] + samples[sample].loop_end -
  1272.    voices[voice].offset_pending,
  1273.    (samples[sample].fractions >> 4) & 0x0f, is16bits);
  1274. mode |= 0x40;
  1275. }
  1276. gus_write_addr(0x02, sample_ptrs[sample] + samples[sample].loop_start,
  1277. samples[sample].fractions & 0x0f, is16bits); /* Loop start location */
  1278. gus_write_addr(0x04, sample_ptrs[sample] + samples[sample].loop_end,
  1279. (samples[sample].fractions >> 4) & 0x0f, is16bits); /* Loop end location */
  1280. }
  1281. else
  1282. {
  1283. mode |= 0x20; /* Loop IRQ at the end */
  1284. voices[voice].loop_irq_mode = LMODE_FINISH; /* Ramp down at the end */
  1285. voices[voice].loop_irq_parm = 1;
  1286. gus_write_addr(0x02, sample_ptrs[sample], 0, is16bits); /* Loop start location */
  1287. gus_write_addr(0x04, sample_ptrs[sample] + samples[sample].len - 1,
  1288. (samples[sample].fractions >> 4) & 0x0f, is16bits); /* Loop end location */
  1289. }
  1290. gus_voice_freq(freq);
  1291. gus_voice_balance(pan);
  1292. gus_voice_on(mode);
  1293. restore_flags(flags);
  1294. return 0;
  1295. }
  1296. /*
  1297.  * New guswave_start_note by Andrew J. Robinson attempts to minimize clicking
  1298.  * when the note playing on the voice is changed.  It uses volume
  1299.  * ramping.
  1300.  */
  1301. static int guswave_start_note(int dev, int voice, int note_num, int volume)
  1302. {
  1303. long int flags;
  1304. int mode;
  1305. int ret_val = 0;
  1306. save_flags(flags);
  1307. cli();
  1308. if (note_num == 255)
  1309. {
  1310. if (voices[voice].volume_irq_mode == VMODE_START_NOTE)
  1311. {
  1312. voices[voice].volume_pending = volume;
  1313. }
  1314. else
  1315. {
  1316. ret_val = guswave_start_note2(dev, voice, note_num, volume);
  1317. }
  1318. }
  1319. else
  1320. {
  1321. gus_select_voice(voice);
  1322. mode = gus_read8(0x00);
  1323. if (mode & 0x20)
  1324. gus_write8(0x00, mode & 0xdf); /* No interrupt! */
  1325. voices[voice].offset_pending = 0;
  1326. voices[voice].kill_pending = 0;
  1327. voices[voice].volume_irq_mode = 0;
  1328. voices[voice].loop_irq_mode = 0;
  1329. if (voices[voice].sample_pending >= 0)
  1330. {
  1331. restore_flags(flags); /* Run temporarily with interrupts enabled */
  1332. guswave_set_instr(voices[voice].dev_pending, voice, voices[voice].sample_pending);
  1333. voices[voice].sample_pending = -1;
  1334. save_flags(flags);
  1335. cli();
  1336. gus_select_voice(voice); /* Reselect the voice (just to be sure) */
  1337. }
  1338. if ((mode & 0x01) || (int) ((gus_read16(0x09) >> 4) < (unsigned) 2065))
  1339. {
  1340. ret_val = guswave_start_note2(dev, voice, note_num, volume);
  1341. }
  1342. else
  1343. {
  1344. voices[voice].dev_pending = dev;
  1345. voices[voice].note_pending = note_num;
  1346. voices[voice].volume_pending = volume;
  1347. voices[voice].volume_irq_mode = VMODE_START_NOTE;
  1348. gus_rampoff();
  1349. gus_ramp_range(2000, 4065);
  1350. gus_ramp_rate(0, 63); /* Fastest possible rate */
  1351. gus_rampon(0x20 | 0x40); /* Ramp down, once, irq */
  1352. }
  1353. }
  1354. restore_flags(flags);
  1355. return ret_val;
  1356. }
  1357. static void guswave_reset(int dev)
  1358. {
  1359. int i;
  1360. for (i = 0; i < 32; i++)
  1361. {
  1362. gus_voice_init(i);
  1363. gus_voice_init2(i);
  1364. }
  1365. }
  1366. static int guswave_open(int dev, int mode)
  1367. {
  1368. int err;
  1369. if (gus_busy)
  1370. return -EBUSY;
  1371. voice_alloc->timestamp = 0;
  1372. if (gus_no_wave_dma) {
  1373. gus_no_dma = 1;
  1374. } else {
  1375. if ((err = DMAbuf_open_dma(gus_devnum)) < 0)
  1376. {
  1377. /* printk( "GUS: Loading samples without DMAn"); */
  1378. gus_no_dma = 1; /* Upload samples using PIO */
  1379. }
  1380. else
  1381. gus_no_dma = 0;
  1382. }
  1383. init_waitqueue_head(&dram_sleeper);
  1384. gus_busy = 1;
  1385. active_device = GUS_DEV_WAVE;
  1386. gusintr(gus_irq, (void *)gus_hw_config, NULL); /* Serve pending interrupts */
  1387. gus_initialize();
  1388. gus_reset();
  1389. gusintr(gus_irq, (void *)gus_hw_config, NULL); /* Serve pending interrupts */
  1390. return 0;
  1391. }
  1392. static void guswave_close(int dev)
  1393. {
  1394. gus_busy = 0;
  1395. active_device = 0;
  1396. gus_reset();
  1397. if (!gus_no_dma)
  1398. DMAbuf_close_dma(gus_devnum);
  1399. }
  1400. static int guswave_load_patch(int dev, int format, const char *addr,
  1401.    int offs, int count, int pmgr_flag)
  1402. {
  1403. struct patch_info patch;
  1404. int instr;
  1405. long sizeof_patch;
  1406. unsigned long blk_sz, blk_end, left, src_offs, target;
  1407. sizeof_patch = (long) &patch.data[0] - (long) &patch; /* Header size */
  1408. if (format != GUS_PATCH)
  1409. {
  1410. /* printk("GUS Error: Invalid patch format (key) 0x%xn", format);*/
  1411. return -EINVAL;
  1412. }
  1413. if (count < sizeof_patch)
  1414. {
  1415. /*   printk("GUS Error: Patch header too shortn");*/
  1416.   return -EINVAL;
  1417. }
  1418. count -= sizeof_patch;
  1419. if (free_sample >= MAX_SAMPLE)
  1420. {
  1421. /*   printk("GUS: Sample table fulln");*/
  1422.   return -ENOSPC;
  1423. }
  1424. /*
  1425.  * Copy the header from user space but ignore the first bytes which have
  1426.  * been transferred already.
  1427.  */
  1428. copy_from_user(&((char *) &patch)[offs], &(addr)[offs], sizeof_patch - offs);
  1429. if (patch.mode & WAVE_ROM)
  1430. return -EINVAL;
  1431. if (gus_mem_size == 0)
  1432. return -ENOSPC;
  1433. instr = patch.instr_no;
  1434. if (instr < 0 || instr > MAX_PATCH)
  1435. {
  1436. /* printk(KERN_ERR "GUS: Invalid patch number %dn", instr);*/
  1437. return -EINVAL;
  1438. }
  1439. if (count < patch.len)
  1440. {
  1441. /* printk(KERN_ERR "GUS Warning: Patch record too short (%d<%d)n", count, (int) patch.len);*/
  1442. patch.len = count;
  1443. }
  1444. if (patch.len <= 0 || patch.len > gus_mem_size)
  1445. {
  1446. /* printk(KERN_ERR "GUS: Invalid sample length %dn", (int) patch.len);*/
  1447. return -EINVAL;
  1448. }
  1449. if (patch.mode & WAVE_LOOPING)
  1450. {
  1451. if (patch.loop_start < 0 || patch.loop_start >= patch.len)
  1452. {
  1453. /* printk(KERN_ERR "GUS: Invalid loop startn");*/
  1454. return -EINVAL;
  1455. }
  1456. if (patch.loop_end < patch.loop_start || patch.loop_end > patch.len)
  1457. {
  1458. /* printk(KERN_ERR "GUS: Invalid loop endn");*/
  1459. return -EINVAL;
  1460. }
  1461. }
  1462. free_mem_ptr = (free_mem_ptr + 31) & ~31; /* 32 byte alignment */
  1463. if (patch.mode & WAVE_16_BITS)
  1464. {
  1465. /*
  1466.  * 16 bit samples must fit one 256k bank.
  1467.  */
  1468. if (patch.len >= GUS_BANK_SIZE)
  1469. {
  1470. /*  printk("GUS: Sample (16 bit) too long %dn", (int) patch.len);*/
  1471. return -ENOSPC;
  1472. }
  1473. if ((free_mem_ptr / GUS_BANK_SIZE) !=
  1474. ((free_mem_ptr + patch.len) / GUS_BANK_SIZE))
  1475. {
  1476. unsigned long   tmp_mem =
  1477. /* Align to 256K */
  1478. ((free_mem_ptr / GUS_BANK_SIZE) + 1) * GUS_BANK_SIZE;
  1479. if ((tmp_mem + patch.len) > gus_mem_size)
  1480. return -ENOSPC;
  1481. free_mem_ptr = tmp_mem; /* This leaves unusable memory */
  1482. }
  1483. }
  1484. if ((free_mem_ptr + patch.len) > gus_mem_size)
  1485. return -ENOSPC;
  1486. sample_ptrs[free_sample] = free_mem_ptr;
  1487. /*
  1488.  * Tremolo is not possible with envelopes
  1489.  */
  1490. if (patch.mode & WAVE_ENVELOPES)
  1491. patch.mode &= ~WAVE_TREMOLO;
  1492. if (!(patch.mode & WAVE_FRACTIONS))
  1493. {
  1494.   patch.fractions = 0;
  1495. }
  1496. memcpy((char *) &samples[free_sample], &patch, sizeof_patch);
  1497. /*
  1498.  * Link this_one sample to the list of samples for patch 'instr'.
  1499.  */
  1500. samples[free_sample].key = patch_table[instr];
  1501. patch_table[instr] = free_sample;
  1502. /*
  1503.  * Use DMA to transfer the wave data to the DRAM
  1504.  */
  1505. left = patch.len;
  1506. src_offs = 0;
  1507. target = free_mem_ptr;
  1508. while (left) /* Not completely transferred yet */
  1509. {
  1510. blk_sz = audio_devs[gus_devnum]->dmap_out->bytes_in_use;
  1511. if (blk_sz > left)
  1512. blk_sz = left;
  1513. /*
  1514.  * DMA cannot cross bank (256k) boundaries. Check for that.
  1515.  */
  1516.  
  1517. blk_end = target + blk_sz;
  1518. if ((target / GUS_BANK_SIZE) != (blk_end / GUS_BANK_SIZE))
  1519. {
  1520. /* Split the block */
  1521. blk_end &= ~(GUS_BANK_SIZE - 1);
  1522. blk_sz = blk_end - target;
  1523. }
  1524. if (gus_no_dma)
  1525. {
  1526. /*
  1527.  * For some reason the DMA is not possible. We have to use PIO.
  1528.  */
  1529. long i;
  1530. unsigned char data;
  1531. for (i = 0; i < blk_sz; i++)
  1532. {
  1533. get_user(*(unsigned char *) &data, (unsigned char *) &((addr)[sizeof_patch + i]));
  1534. if (patch.mode & WAVE_UNSIGNED)
  1535. if (!(patch.mode & WAVE_16_BITS) || (i & 0x01))
  1536. data ^= 0x80; /* Convert to signed */
  1537. gus_poke(target + i, data);
  1538. }
  1539. }
  1540. else
  1541. {
  1542. unsigned long address, hold_address;
  1543. unsigned char dma_command;
  1544. unsigned long flags;
  1545. if (audio_devs[gus_devnum]->dmap_out->raw_buf == NULL)
  1546. {
  1547. printk(KERN_ERR "GUS: DMA buffer == NULLn");
  1548. return -ENOSPC;
  1549. }
  1550. /*
  1551.  * OK, move now. First in and then out.
  1552.  */
  1553. copy_from_user(audio_devs[gus_devnum]->dmap_out->raw_buf, &(addr)[sizeof_patch + src_offs], blk_sz);
  1554. save_flags(flags);
  1555. cli();
  1556. /******** INTERRUPTS DISABLED NOW ********/
  1557. gus_write8(0x41, 0); /* Disable GF1 DMA */
  1558. DMAbuf_start_dma(gus_devnum, audio_devs[gus_devnum]->dmap_out->raw_buf_phys,
  1559. blk_sz, DMA_MODE_WRITE);
  1560. /*
  1561.  * Set the DRAM address for the wave data
  1562.  */
  1563. if (iw_mode)
  1564. {
  1565. /* Different address translation in enhanced mode */
  1566. unsigned char   hi;
  1567. if (gus_dma > 4)
  1568. address = target >> 1; /* Convert to 16 bit word address */
  1569. else
  1570. address = target;
  1571. hi = (unsigned char) ((address >> 16) & 0xf0);
  1572. hi += (unsigned char) (address & 0x0f);
  1573. gus_write16(0x42, (address >> 4) & 0xffff); /* DMA address (low) */
  1574. gus_write8(0x50, hi);
  1575. }
  1576. else
  1577. {
  1578. address = target;
  1579. if (audio_devs[gus_devnum]->dmap_out->dma > 3)
  1580. {
  1581. hold_address = address;
  1582. address = address >> 1;
  1583. address &= 0x0001ffffL;
  1584. address |= (hold_address & 0x000c0000L);
  1585. }
  1586. gus_write16(0x42, (address >> 4) & 0xffff); /* DRAM DMA address */
  1587. }
  1588. /*
  1589.  * Start the DMA transfer
  1590.  */
  1591. dma_command = 0x21; /* IRQ enable, DMA start */
  1592. if (patch.mode & WAVE_UNSIGNED)
  1593. dma_command |= 0x80; /* Invert MSB */
  1594. if (patch.mode & WAVE_16_BITS)
  1595. dma_command |= 0x40; /* 16 bit _DATA_ */
  1596. if (audio_devs[gus_devnum]->dmap_out->dma > 3)
  1597. dma_command |= 0x04; /* 16 bit DMA _channel_ */
  1598. gus_write8(0x41, dma_command); /* Lets go luteet (=bugs) */
  1599. /*
  1600.  * Sleep here until the DRAM DMA done interrupt is served
  1601.  */
  1602. active_device = GUS_DEV_WAVE;
  1603. if (!interruptible_sleep_on_timeout(&dram_sleeper, HZ))
  1604. printk("GUS: DMA Transfer timed outn");
  1605. restore_flags(flags);
  1606. }
  1607. /*
  1608.  * Now the next part
  1609.  */
  1610. left -= blk_sz;
  1611. src_offs += blk_sz;
  1612. target += blk_sz;
  1613. gus_write8(0x41, 0); /* Stop DMA */
  1614. }
  1615. free_mem_ptr += patch.len;
  1616. free_sample++;
  1617. return 0;
  1618. }
  1619. static void guswave_hw_control(int dev, unsigned char *event_rec)
  1620. {
  1621. int voice, cmd;
  1622. unsigned short p1, p2;
  1623. unsigned int plong;
  1624. unsigned long flags;
  1625. cmd = event_rec[2];
  1626. voice = event_rec[3];
  1627. p1 = *(unsigned short *) &event_rec[4];
  1628. p2 = *(unsigned short *) &event_rec[6];
  1629. plong = *(unsigned int *) &event_rec[4];
  1630. if ((voices[voice].volume_irq_mode == VMODE_START_NOTE) &&
  1631. (cmd != _GUS_VOICESAMPLE) && (cmd != _GUS_VOICE_POS))
  1632. do_volume_irq(voice);
  1633. switch (cmd)
  1634. {
  1635. case _GUS_NUMVOICES:
  1636. save_flags(flags);
  1637. cli();
  1638. gus_select_voice(voice);
  1639. gus_select_max_voices(p1);
  1640. restore_flags(flags);
  1641. break;
  1642. case _GUS_VOICESAMPLE:
  1643. guswave_set_instr(dev, voice, p1);
  1644. break;
  1645. case _GUS_VOICEON:
  1646. save_flags(flags);
  1647. cli();
  1648. gus_select_voice(voice);
  1649. p1 &= ~0x20; /* Don't allow interrupts */
  1650. gus_voice_on(p1);
  1651. restore_flags(flags);
  1652. break;
  1653. case _GUS_VOICEOFF:
  1654. save_flags(flags);
  1655. cli();
  1656. gus_select_voice(voice);
  1657. gus_voice_off();
  1658. restore_flags(flags);
  1659. break;
  1660. case _GUS_VOICEFADE:
  1661. gus_voice_fade(voice);
  1662. break;
  1663. case _GUS_VOICEMODE:
  1664. save_flags(flags);
  1665. cli();
  1666. gus_select_voice(voice);
  1667. p1 &= ~0x20; /* Don't allow interrupts */
  1668. gus_voice_mode(p1);
  1669. restore_flags(flags);
  1670. break;
  1671. case _GUS_VOICEBALA:
  1672. save_flags(flags);
  1673. cli();
  1674. gus_select_voice(voice);
  1675. gus_voice_balance(p1);
  1676. restore_flags(flags);
  1677. break;
  1678. case _GUS_VOICEFREQ:
  1679. save_flags(flags);
  1680. cli();
  1681. gus_select_voice(voice);
  1682. gus_voice_freq(plong);
  1683. restore_flags(flags);
  1684. break;
  1685. case _GUS_VOICEVOL:
  1686. save_flags(flags);
  1687. cli();
  1688. gus_select_voice(voice);
  1689. gus_voice_volume(p1);
  1690. restore_flags(flags);
  1691. break;
  1692. case _GUS_VOICEVOL2: /* Just update the software voice level */
  1693. voices[voice].initial_volume = voices[voice].current_volume = p1;
  1694. break;
  1695. case _GUS_RAMPRANGE:
  1696. if (voices[voice].mode & WAVE_ENVELOPES)
  1697. break; /* NO-NO */
  1698. save_flags(flags);
  1699. cli();
  1700. gus_select_voice(voice);
  1701. gus_ramp_range(p1, p2);
  1702. restore_flags(flags);
  1703. break;
  1704. case _GUS_RAMPRATE:
  1705. if (voices[voice].mode & WAVE_ENVELOPES)
  1706. break; /* NJET-NJET */
  1707. save_flags(flags);
  1708. cli();
  1709. gus_select_voice(voice);
  1710. gus_ramp_rate(p1, p2);
  1711. restore_flags(flags);
  1712. break;
  1713. case _GUS_RAMPMODE:
  1714. if (voices[voice].mode & WAVE_ENVELOPES)
  1715. break; /* NO-NO */
  1716. save_flags(flags);
  1717. cli();
  1718. gus_select_voice(voice);
  1719. p1 &= ~0x20; /* Don't allow interrupts */
  1720. gus_ramp_mode(p1);
  1721. restore_flags(flags);
  1722. break;
  1723. case _GUS_RAMPON:
  1724. if (voices[voice].mode & WAVE_ENVELOPES)
  1725. break; /* EI-EI */
  1726. save_flags(flags);
  1727. cli();
  1728. gus_select_voice(voice);
  1729. p1 &= ~0x20; /* Don't allow interrupts */
  1730. gus_rampon(p1);
  1731. restore_flags(flags);
  1732. break;
  1733. case _GUS_RAMPOFF:
  1734. if (voices[voice].mode & WAVE_ENVELOPES)
  1735. break; /* NEJ-NEJ */
  1736. save_flags(flags);
  1737. cli();
  1738. gus_select_voice(voice);
  1739. gus_rampoff();
  1740. restore_flags(flags);
  1741. break;
  1742. case _GUS_VOLUME_SCALE:
  1743. volume_base = p1;
  1744. volume_scale = p2;
  1745. break;
  1746. case _GUS_VOICE_POS:
  1747. save_flags(flags);
  1748. cli();
  1749. gus_select_voice(voice);
  1750. gus_set_voice_pos(voice, plong);
  1751. restore_flags(flags);
  1752. break;
  1753. default:
  1754. break;
  1755. }
  1756. }
  1757. static int gus_audio_set_speed(int speed)
  1758. {
  1759. if (speed <= 0)
  1760. speed = gus_audio_speed;
  1761. if (speed < 4000)
  1762. speed = 4000;
  1763. if (speed > 44100)
  1764. speed = 44100;
  1765. gus_audio_speed = speed;
  1766. if (only_read_access)
  1767. {
  1768. /* Compute nearest valid recording speed  and return it */
  1769. /* speed = (9878400 / (gus_audio_speed + 2)) / 16; */
  1770. speed = (((9878400 + gus_audio_speed / 2) / (gus_audio_speed + 2)) + 8) / 16;
  1771. speed = (9878400 / (speed * 16)) - 2;
  1772. }
  1773. return speed;
  1774. }
  1775. static int gus_audio_set_channels(int channels)
  1776. {
  1777. if (!channels)
  1778. return gus_audio_channels;
  1779. if (channels > 2)
  1780. channels = 2;
  1781. if (channels < 1)
  1782. channels = 1;
  1783. gus_audio_channels = channels;
  1784. return channels;
  1785. }
  1786. static int gus_audio_set_bits(int bits)
  1787. {
  1788. if (!bits)
  1789. return gus_audio_bits;
  1790. if (bits != 8 && bits != 16)
  1791. bits = 8;
  1792. if (only_8_bits)
  1793. bits = 8;
  1794. gus_audio_bits = bits;
  1795. return bits;
  1796. }
  1797. static int gus_audio_ioctl(int dev, unsigned int cmd, caddr_t arg)
  1798. {
  1799. int val;
  1800. switch (cmd) 
  1801. {
  1802. case SOUND_PCM_WRITE_RATE:
  1803. if (get_user(val, (int *)arg))
  1804. return -EFAULT;
  1805. val = gus_audio_set_speed(val);
  1806. break;
  1807. case SOUND_PCM_READ_RATE:
  1808. val = gus_audio_speed;
  1809. break;
  1810. case SNDCTL_DSP_STEREO:
  1811. if (get_user(val, (int *)arg))
  1812. return -EFAULT;
  1813. val = gus_audio_set_channels(val + 1) - 1;
  1814. break;
  1815. case SOUND_PCM_WRITE_CHANNELS:
  1816. if (get_user(val, (int *)arg))
  1817. return -EFAULT;
  1818. val = gus_audio_set_channels(val);
  1819. break;
  1820. case SOUND_PCM_READ_CHANNELS:
  1821. val = gus_audio_channels;
  1822. break;
  1823. case SNDCTL_DSP_SETFMT:
  1824. if (get_user(val, (int *)arg))
  1825. return -EFAULT;
  1826. val = gus_audio_set_bits(val);
  1827. break;
  1828. case SOUND_PCM_READ_BITS:
  1829. val = gus_audio_bits;
  1830. break;
  1831. case SOUND_PCM_WRITE_FILTER: /* NOT POSSIBLE */
  1832. case SOUND_PCM_READ_FILTER:
  1833. val = -EINVAL;
  1834. break;
  1835. default:
  1836. return -EINVAL;
  1837. }
  1838. return put_user(val, (int *)arg);
  1839. }
  1840. static void gus_audio_reset(int dev)
  1841. {
  1842. if (recording_active)
  1843. {
  1844. gus_write8(0x49, 0x00); /* Halt recording */
  1845. set_input_volumes();
  1846. }
  1847. }
  1848. static int saved_iw_mode; /* A hack hack hack */
  1849. static int gus_audio_open(int dev, int mode)
  1850. {
  1851. if (gus_busy)
  1852. return -EBUSY;
  1853. if (gus_pnp_flag && mode & OPEN_READ)
  1854. {
  1855. /* printk(KERN_ERR "GUS: Audio device #%d is playback only.n", dev);*/
  1856. return -EIO;
  1857. }
  1858. gus_initialize();
  1859. gus_busy = 1;
  1860. active_device = 0;
  1861. saved_iw_mode = iw_mode;
  1862. if (iw_mode)
  1863. {
  1864. /* There are some problems with audio in enhanced mode so disable it */
  1865. gus_write8(0x19, gus_read8(0x19) & ~0x01); /* Disable enhanced mode */
  1866. iw_mode = 0;
  1867. }
  1868. gus_reset();
  1869. reset_sample_memory();
  1870. gus_select_max_voices(14);
  1871. pcm_active = 0;
  1872. dma_active = 0;
  1873. pcm_opened = 1;
  1874. if (mode & OPEN_READ)
  1875. {
  1876. recording_active = 1;
  1877. set_input_volumes();
  1878. }
  1879. only_read_access = !(mode & OPEN_WRITE);
  1880. only_8_bits = mode & OPEN_READ;
  1881. if (only_8_bits)
  1882. audio_devs[dev]->format_mask = AFMT_U8;
  1883. else
  1884. audio_devs[dev]->format_mask = AFMT_U8 | AFMT_S16_LE;
  1885. return 0;
  1886. }
  1887. static void gus_audio_close(int dev)
  1888. {
  1889. iw_mode = saved_iw_mode;
  1890. gus_reset();
  1891. gus_busy = 0;
  1892. pcm_opened = 0;
  1893. active_device = 0;
  1894. if (recording_active)
  1895. {
  1896. gus_write8(0x49, 0x00); /* Halt recording */
  1897. set_input_volumes();
  1898. }
  1899. recording_active = 0;
  1900. }
  1901. static void gus_audio_update_volume(void)
  1902. {
  1903. unsigned long flags;
  1904. int voice;
  1905. if (pcm_active && pcm_opened)
  1906. for (voice = 0; voice < gus_audio_channels; voice++)
  1907. {
  1908. save_flags(flags);
  1909. cli();
  1910. gus_select_voice(voice);
  1911. gus_rampoff();
  1912. gus_voice_volume(1530 + (25 * gus_pcm_volume));
  1913. gus_ramp_range(65, 1530 + (25 * gus_pcm_volume));
  1914. restore_flags(flags);
  1915. }
  1916. }
  1917. static void play_next_pcm_block(void)
  1918. {
  1919. unsigned long flags;
  1920. int speed = gus_audio_speed;
  1921. int this_one, is16bits, chn;
  1922. unsigned long dram_loc;
  1923. unsigned char mode[2], ramp_mode[2];
  1924. if (!pcm_qlen)
  1925. return;
  1926. this_one = pcm_head;
  1927. for (chn = 0; chn < gus_audio_channels; chn++)
  1928. {
  1929. mode[chn] = 0x00;
  1930. ramp_mode[chn] = 0x03; /* Ramping and rollover off */
  1931. if (chn == 0)
  1932. {
  1933. mode[chn] |= 0x20; /* Loop IRQ */
  1934. voices[chn].loop_irq_mode = LMODE_PCM;
  1935. }
  1936. if (gus_audio_bits != 8)
  1937. {
  1938. is16bits = 1;
  1939. mode[chn] |= 0x04; /* 16 bit data */
  1940. }
  1941. else
  1942. is16bits = 0;
  1943. dram_loc = this_one * pcm_bsize;
  1944. dram_loc += chn * pcm_banksize;
  1945. if (this_one == (pcm_nblk - 1)) /* Last fragment of the DRAM buffer */
  1946. {
  1947. mode[chn] |= 0x08; /* Enable loop */
  1948. ramp_mode[chn] = 0x03; /* Disable rollover bit */
  1949. }
  1950. else
  1951. {
  1952. if (chn == 0)
  1953. ramp_mode[chn] = 0x04; /* Enable rollover bit */
  1954. }
  1955. save_flags(flags);
  1956. cli();
  1957. gus_select_voice(chn);
  1958. gus_voice_freq(speed);
  1959. if (gus_audio_channels == 1)
  1960. gus_voice_balance(7); /* mono */
  1961. else if (chn == 0)
  1962. gus_voice_balance(0); /* left */
  1963. else
  1964. gus_voice_balance(15); /* right */
  1965. if (!pcm_active) /* Playback not already active */
  1966. {
  1967. /*
  1968.  * The playback was not started yet (or there has been a pause).
  1969.  * Start the voice (again) and ask for a rollover irq at the end of
  1970.  * this_one block. If this_one one is last of the buffers, use just
  1971.  * the normal loop with irq.
  1972.  */
  1973. gus_voice_off();
  1974. gus_rampoff();
  1975. gus_voice_volume(1530 + (25 * gus_pcm_volume));
  1976. gus_ramp_range(65, 1530 + (25 * gus_pcm_volume));
  1977. gus_write_addr(0x0a, chn * pcm_banksize, 0, is16bits); /* Starting position */
  1978. gus_write_addr(0x02, chn * pcm_banksize, 0, is16bits); /* Loop start */
  1979. if (chn != 0)
  1980. gus_write_addr(0x04, pcm_banksize + (pcm_bsize * pcm_nblk) - 1,
  1981.    0, is16bits); /* Loop end location */
  1982. }
  1983. if (chn == 0)
  1984. gus_write_addr(0x04, dram_loc + pcm_bsize - 1,
  1985.  0, is16bits); /* Loop end location */
  1986. else
  1987. mode[chn] |= 0x08; /* Enable looping */
  1988. restore_flags(flags);
  1989. }
  1990. for (chn = 0; chn < gus_audio_channels; chn++)
  1991. {
  1992. save_flags(flags);
  1993. cli();
  1994. gus_select_voice(chn);
  1995. gus_write8(0x0d, ramp_mode[chn]);
  1996. if (iw_mode)
  1997. gus_write8(0x15, 0x00); /* Reset voice deactivate bit of SMSI */
  1998. gus_voice_on(mode[chn]);
  1999. restore_flags(flags);
  2000. }
  2001. pcm_active = 1;
  2002. }
  2003. static void gus_transfer_output_block(int dev, unsigned long buf,
  2004.   int total_count, int intrflag, int chn)
  2005. {
  2006. /*
  2007.  * This routine transfers one block of audio data to the DRAM. In mono mode
  2008.  * it's called just once. When in stereo mode, this_one routine is called
  2009.  * once for both channels.
  2010.  *
  2011.  * The left/mono channel data is transferred to the beginning of dram and the
  2012.  * right data to the area pointed by gus_page_size.
  2013.  */
  2014. int this_one, count;
  2015. unsigned long flags;
  2016. unsigned char dma_command;
  2017. unsigned long address, hold_address;
  2018. save_flags(flags);
  2019. cli();
  2020. count = total_count / gus_audio_channels;
  2021. if (chn == 0)
  2022. {
  2023. if (pcm_qlen >= pcm_nblk)
  2024. printk(KERN_WARNING "GUS Warning: PCM buffers out of syncn");
  2025. this_one = pcm_current_block = pcm_tail;
  2026. pcm_qlen++;
  2027. pcm_tail = (pcm_tail + 1) % pcm_nblk;
  2028. pcm_datasize[this_one] = count;
  2029. }
  2030. else
  2031. this_one = pcm_current_block;
  2032. gus_write8(0x41, 0); /* Disable GF1 DMA */
  2033. DMAbuf_start_dma(dev, buf + (chn * count), count, DMA_MODE_WRITE);
  2034. address = this_one * pcm_bsize;
  2035. address += chn * pcm_banksize;
  2036. if (audio_devs[dev]->dmap_out->dma > 3)
  2037. {
  2038. hold_address = address;
  2039. address = address >> 1;
  2040. address &= 0x0001ffffL;
  2041. address |= (hold_address & 0x000c0000L);
  2042. }
  2043. gus_write16(0x42, (address >> 4) & 0xffff); /* DRAM DMA address */
  2044. dma_command = 0x21; /* IRQ enable, DMA start */
  2045. if (gus_audio_bits != 8)
  2046. dma_command |= 0x40; /* 16 bit _DATA_ */
  2047. else
  2048. dma_command |= 0x80; /* Invert MSB */
  2049. if (audio_devs[dev]->dmap_out->dma > 3)
  2050. dma_command |= 0x04; /* 16 bit DMA channel */
  2051. gus_write8(0x41, dma_command); /* Kick start */
  2052. if (chn == (gus_audio_channels - 1)) /* Last channel */
  2053. {
  2054. /*
  2055.  * Last (right or mono) channel data
  2056.  */
  2057. dma_active = 1; /* DMA started. There is a unacknowledged buffer */
  2058. active_device = GUS_DEV_PCM_DONE;
  2059. if (!pcm_active && (pcm_qlen > 1 || count < pcm_bsize))
  2060. {
  2061. play_next_pcm_block();
  2062. }
  2063. }
  2064. else
  2065. {
  2066. /*
  2067.  * Left channel data. The right channel
  2068.  * is transferred after DMA interrupt
  2069.  */
  2070. active_device = GUS_DEV_PCM_CONTINUE;
  2071. }
  2072. restore_flags(flags);
  2073. }
  2074. static void gus_uninterleave8(char *buf, int l)
  2075. {
  2076. /* This routine uninterleaves 8 bit stereo output (LRLRLR->LLLRRR) */
  2077. int i, p = 0, halfsize = l / 2;
  2078. char *buf2 = buf + halfsize, *src = bounce_buf;
  2079. memcpy(bounce_buf, buf, l);
  2080. for (i = 0; i < halfsize; i++)
  2081. {
  2082. buf[i] = src[p++]; /* Left channel */
  2083. buf2[i] = src[p++]; /* Right channel */
  2084. }
  2085. }
  2086. static void gus_uninterleave16(short *buf, int l)
  2087. {
  2088. /* This routine uninterleaves 16 bit stereo output (LRLRLR->LLLRRR) */
  2089. int i, p = 0, halfsize = l / 2;
  2090. short *buf2 = buf + halfsize, *src = (short *) bounce_buf;
  2091. memcpy(bounce_buf, (char *) buf, l * 2);
  2092. for (i = 0; i < halfsize; i++)
  2093. {
  2094. buf[i] = src[p++]; /* Left channel */
  2095. buf2[i] = src[p++]; /* Right channel */
  2096. }
  2097. }
  2098. static void gus_audio_output_block(int dev, unsigned long buf, int total_count,
  2099.        int intrflag)
  2100. {
  2101. struct dma_buffparms *dmap = audio_devs[dev]->dmap_out;
  2102. dmap->flags |= DMA_NODMA | DMA_NOTIMEOUT;
  2103. pcm_current_buf = buf;
  2104. pcm_current_count = total_count;
  2105. pcm_current_intrflag = intrflag;
  2106. pcm_current_dev = dev;
  2107. if (gus_audio_channels == 2)
  2108. {
  2109. char *b = dmap->raw_buf + (buf - dmap->raw_buf_phys);
  2110. if (gus_audio_bits == 8)
  2111. gus_uninterleave8(b, total_count);
  2112. else
  2113. gus_uninterleave16((short *) b, total_count / 2);
  2114. }
  2115. gus_transfer_output_block(dev, buf, total_count, intrflag, 0);
  2116. }
  2117. static void gus_audio_start_input(int dev, unsigned long buf, int count,
  2118.       int intrflag)
  2119. {
  2120. unsigned long flags;
  2121. unsigned char mode;
  2122. save_flags(flags);
  2123. cli();
  2124. DMAbuf_start_dma(dev, buf, count, DMA_MODE_READ);
  2125. mode = 0xa0; /* DMA IRQ enabled, invert MSB */
  2126. if (audio_devs[dev]->dmap_in->dma > 3)
  2127. mode |= 0x04; /* 16 bit DMA channel */
  2128. if (gus_audio_channels > 1)
  2129. mode |= 0x02; /* Stereo */
  2130. mode |= 0x01; /* DMA enable */
  2131. gus_write8(0x49, mode);
  2132. restore_flags(flags);
  2133. }
  2134. static int gus_audio_prepare_for_input(int dev, int bsize, int bcount)
  2135. {
  2136. unsigned int rate;
  2137. gus_audio_bsize = bsize;
  2138. audio_devs[dev]->dmap_in->flags |= DMA_NODMA;
  2139. rate = (((9878400 + gus_audio_speed / 2) / (gus_audio_speed + 2)) + 8) / 16;
  2140. gus_write8(0x48, rate & 0xff); /* Set sampling rate */
  2141. if (gus_audio_bits != 8)
  2142. {
  2143. /* printk("GUS Error: 16 bit recording not supportedn");*/
  2144. return -EINVAL;
  2145. }
  2146. return 0;
  2147. }
  2148. static int gus_audio_prepare_for_output(int dev, int bsize, int bcount)
  2149. {
  2150. int i;
  2151. long mem_ptr, mem_size;
  2152. audio_devs[dev]->dmap_out->flags |= DMA_NODMA | DMA_NOTIMEOUT;
  2153. mem_ptr = 0;
  2154. mem_size = gus_mem_size / gus_audio_channels;
  2155. if (mem_size > (256 * 1024))
  2156. mem_size = 256 * 1024;
  2157. pcm_bsize = bsize / gus_audio_channels;
  2158. pcm_head = pcm_tail = pcm_qlen = 0;
  2159. pcm_nblk = 2; /* MAX_PCM_BUFFERS; */
  2160. if ((pcm_bsize * pcm_nblk) > mem_size)
  2161. pcm_nblk = mem_size / pcm_bsize;
  2162. for (i = 0; i < pcm_nblk; i++)
  2163. pcm_datasize[i] = 0;
  2164. pcm_banksize = pcm_nblk * pcm_bsize;
  2165. if (gus_audio_bits != 8 && pcm_banksize == (256 * 1024))
  2166. pcm_nblk--;
  2167. gus_write8(0x41, 0); /* Disable GF1 DMA */
  2168. return 0;
  2169. }
  2170. static int gus_local_qlen(int dev)
  2171. {
  2172. return pcm_qlen;
  2173. }
  2174. static struct audio_driver gus_audio_driver =
  2175. {
  2176. owner: THIS_MODULE,
  2177. open: gus_audio_open,
  2178. close: gus_audio_close,
  2179. output_block: gus_audio_output_block,
  2180. start_input: gus_audio_start_input,
  2181. ioctl: gus_audio_ioctl,
  2182. prepare_for_input: gus_audio_prepare_for_input,
  2183. prepare_for_output: gus_audio_prepare_for_output,
  2184. halt_io: gus_audio_reset,
  2185. local_qlen: gus_local_qlen,
  2186. };
  2187. static void guswave_setup_voice(int dev, int voice, int chn)
  2188. {
  2189. struct channel_info *info = &synth_devs[dev]->chn_info[chn];
  2190. guswave_set_instr(dev, voice, info->pgm_num);
  2191. voices[voice].expression_vol = info->controllers[CTL_EXPRESSION]; /* Just MSB */
  2192. voices[voice].main_vol = (info->controllers[CTL_MAIN_VOLUME] * 100) / (unsigned) 128;
  2193. voices[voice].panning = (info->controllers[CTL_PAN] * 2) - 128;
  2194. voices[voice].bender = 0;
  2195. voices[voice].bender_range = info->bender_range;
  2196. if (chn == 9)
  2197. voices[voice].fixed_pitch = 1;
  2198. }
  2199. static void guswave_bender(int dev, int voice, int value)
  2200. {
  2201. int freq;
  2202. unsigned long   flags;
  2203. voices[voice].bender = value - 8192;
  2204. freq = compute_finetune(voices[voice].orig_freq, value - 8192, voices[voice].bender_range, 0);
  2205. voices[voice].current_freq = freq;
  2206. save_flags(flags);
  2207. cli();
  2208. gus_select_voice(voice);
  2209. gus_voice_freq(freq);
  2210. restore_flags(flags);
  2211. }
  2212. static int guswave_alloc(int dev, int chn, int note, struct voice_alloc_info *alloc)
  2213. {
  2214. int i, p, best = -1, best_time = 0x7fffffff;
  2215. p = alloc->ptr;
  2216. /*
  2217.  * First look for a completely stopped voice
  2218.  */
  2219. for (i = 0; i < alloc->max_voice; i++)
  2220. {
  2221. if (alloc->map[p] == 0)
  2222. {
  2223. alloc->ptr = p;
  2224. return p;
  2225. }
  2226. if (alloc->alloc_times[p] < best_time)
  2227. {
  2228. best = p;
  2229. best_time = alloc->alloc_times[p];
  2230. }
  2231. p = (p + 1) % alloc->max_voice;
  2232. }
  2233. /*
  2234.  * Then look for a releasing voice
  2235.  */
  2236. for (i = 0; i < alloc->max_voice; i++)
  2237. {
  2238. if (alloc->map[p] == 0xffff)
  2239. {
  2240. alloc->ptr = p;
  2241. return p;
  2242. }
  2243. p = (p + 1) % alloc->max_voice;
  2244. }
  2245. if (best >= 0)
  2246. p = best;
  2247. alloc->ptr = p;
  2248. return p;
  2249. }
  2250. static struct synth_operations guswave_operations =
  2251. {
  2252. owner: THIS_MODULE,
  2253. id: "GUS",
  2254. info: &gus_info,
  2255. midi_dev: 0,
  2256. synth_type: SYNTH_TYPE_SAMPLE,
  2257. synth_subtype: SAMPLE_TYPE_GUS,
  2258. open: guswave_open,
  2259. close: guswave_close,
  2260. ioctl: guswave_ioctl,
  2261. kill_note: guswave_kill_note,
  2262. start_note: guswave_start_note,
  2263. set_instr: guswave_set_instr,
  2264. reset: guswave_reset,
  2265. hw_control: guswave_hw_control,
  2266. load_patch: guswave_load_patch,
  2267. aftertouch: guswave_aftertouch,
  2268. controller: guswave_controller,
  2269. panning: guswave_panning,
  2270. volume_method: guswave_volume_method,
  2271. bender: guswave_bender,
  2272. alloc_voice: guswave_alloc,
  2273. setup_voice: guswave_setup_voice
  2274. };
  2275. static void set_input_volumes(void)
  2276. {
  2277. unsigned long flags;
  2278. unsigned char mask = 0xff & ~0x06; /* Just line out enabled */
  2279. if (have_gus_max) /* Don't disturb GUS MAX */
  2280. return;
  2281. save_flags(flags);
  2282. cli();
  2283. /*
  2284.  *    Enable channels having vol > 10%
  2285.  *      Note! bit 0x01 means the line in DISABLED while 0x04 means
  2286.  *            the mic in ENABLED.
  2287.  */
  2288. if (gus_line_vol > 10)
  2289. mask &= ~0x01;
  2290. if (gus_mic_vol > 10)
  2291. mask |= 0x04;
  2292. if (recording_active)
  2293. {
  2294. /*
  2295.  *    Disable channel, if not selected for recording
  2296.  */
  2297. if (!(gus_recmask & SOUND_MASK_LINE))
  2298. mask |= 0x01;
  2299. if (!(gus_recmask & SOUND_MASK_MIC))
  2300. mask &= ~0x04;
  2301. }
  2302. mix_image &= ~0x07;
  2303. mix_image |= mask & 0x07;
  2304. outb((mix_image), u_Mixer);
  2305. restore_flags(flags);
  2306. }
  2307. #define MIX_DEVS (SOUND_MASK_MIC|SOUND_MASK_LINE| 
  2308.  SOUND_MASK_SYNTH|SOUND_MASK_PCM)
  2309. int gus_default_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg)
  2310. {
  2311. int vol, val;
  2312. if (((cmd >> 8) & 0xff) != 'M')
  2313. return -EINVAL;
  2314. if (!access_ok(VERIFY_WRITE, (int *)arg, sizeof(int)))
  2315. return -EFAULT;
  2316. if (_SIOC_DIR(cmd) & _SIOC_WRITE) 
  2317. {
  2318. if (__get_user(val, (int *) arg))
  2319. return -EFAULT;
  2320. switch (cmd & 0xff) 
  2321. {
  2322. case SOUND_MIXER_RECSRC:
  2323. gus_recmask = val & MIX_DEVS;
  2324. if (!(gus_recmask & (SOUND_MASK_MIC | SOUND_MASK_LINE)))
  2325. gus_recmask = SOUND_MASK_MIC;
  2326. /* Note! Input volumes are updated during next open for recording */
  2327. val = gus_recmask;
  2328. break;
  2329. case SOUND_MIXER_MIC:
  2330. vol = val & 0xff;
  2331. if (vol < 0)
  2332. vol = 0;
  2333. if (vol > 100)
  2334. vol = 100;
  2335. gus_mic_vol = vol;
  2336. set_input_volumes();
  2337. val = vol | (vol << 8);
  2338. break;
  2339. case SOUND_MIXER_LINE:
  2340. vol = val & 0xff;
  2341. if (vol < 0)
  2342. vol = 0;
  2343. if (vol > 100)
  2344. vol = 100;
  2345. gus_line_vol = vol;
  2346. set_input_volumes();
  2347. val = vol | (vol << 8);
  2348. break;
  2349. case SOUND_MIXER_PCM:
  2350. gus_pcm_volume = val & 0xff;
  2351. if (gus_pcm_volume < 0)
  2352. gus_pcm_volume = 0;
  2353. if (gus_pcm_volume > 100)
  2354. gus_pcm_volume = 100;
  2355. gus_audio_update_volume();
  2356. val = gus_pcm_volume | (gus_pcm_volume << 8);
  2357. break;
  2358. case SOUND_MIXER_SYNTH:
  2359. gus_wave_volume = val & 0xff;
  2360. if (gus_wave_volume < 0)
  2361. gus_wave_volume = 0;
  2362. if (gus_wave_volume > 100)
  2363. gus_wave_volume = 100;
  2364. if (active_device == GUS_DEV_WAVE) 
  2365. {
  2366. int voice;
  2367. for (voice = 0; voice < nr_voices; voice++)
  2368. dynamic_volume_change(voice); /* Apply the new vol */
  2369. }
  2370. val = gus_wave_volume | (gus_wave_volume << 8);
  2371. break;
  2372. default:
  2373. return -EINVAL;
  2374. }
  2375. }
  2376. else
  2377. {
  2378. switch (cmd & 0xff) 
  2379. {
  2380. /*
  2381.  * Return parameters
  2382.  */
  2383. case SOUND_MIXER_RECSRC:
  2384. val = gus_recmask;
  2385. break;
  2386. case SOUND_MIXER_DEVMASK:
  2387. val = MIX_DEVS;
  2388. break;
  2389. case SOUND_MIXER_STEREODEVS:
  2390. val = 0;
  2391. break;
  2392. case SOUND_MIXER_RECMASK:
  2393. val = SOUND_MASK_MIC | SOUND_MASK_LINE;
  2394. break;
  2395. case SOUND_MIXER_CAPS:
  2396. val = 0;
  2397. break;
  2398. case SOUND_MIXER_MIC:
  2399. val = gus_mic_vol | (gus_mic_vol << 8);
  2400. break;
  2401. case SOUND_MIXER_LINE:
  2402. val = gus_line_vol | (gus_line_vol << 8);
  2403. break;
  2404. case SOUND_MIXER_PCM:
  2405. val = gus_pcm_volume | (gus_pcm_volume << 8);
  2406. break;
  2407. case SOUND_MIXER_SYNTH:
  2408. val = gus_wave_volume | (gus_wave_volume << 8);
  2409. break;
  2410. default:
  2411. return -EINVAL;
  2412. }
  2413. }
  2414. return __put_user(val, (int *)arg);
  2415. }
  2416. static struct mixer_operations gus_mixer_operations =
  2417. {
  2418. owner: THIS_MODULE,
  2419. id: "GUS",
  2420. name: "Gravis Ultrasound",
  2421. ioctl: gus_default_mixer_ioctl
  2422. };
  2423. static int __init gus_default_mixer_init(void)
  2424. {
  2425. int n;
  2426. if ((n = sound_alloc_mixerdev()) != -1)
  2427. {
  2428. /*
  2429.  * Don't install if there is another
  2430.  * mixer
  2431.  */
  2432. mixer_devs[n] = &gus_mixer_operations;
  2433. }
  2434. if (have_gus_max)
  2435. {
  2436. /*
  2437.  *  Enable all mixer channels on the GF1 side. Otherwise recording will
  2438.  *  not be possible using GUS MAX.
  2439.  */
  2440. mix_image &= ~0x07;
  2441. mix_image |= 0x04; /* All channels enabled */
  2442. outb((mix_image), u_Mixer);
  2443. }
  2444. return n;
  2445. }
  2446. void __init gus_wave_init(struct address_info *hw_config)
  2447. {
  2448. unsigned long flags;
  2449. unsigned char val;
  2450. char *model_num = "2.4";
  2451. char tmp[64], tmp2[64];
  2452. int gus_type = 0x24; /* 2.4 */
  2453. int irq = hw_config->irq, dma = hw_config->dma, dma2 = hw_config->dma2;
  2454. int sdev;
  2455. hw_config->slots[0] = -1; /* No wave */
  2456. hw_config->slots[1] = -1; /* No ad1848 */
  2457. hw_config->slots[4] = -1; /* No audio */
  2458. hw_config->slots[5] = -1; /* No mixer */
  2459. if (!gus_pnp_flag)
  2460. {
  2461. if (irq < 0 || irq > 15)
  2462. {
  2463. printk(KERN_ERR "ERROR! Invalid IRQ#%d. GUS Disabled", irq);
  2464. return;
  2465. }
  2466. }
  2467. if (dma < 0 || dma > 7 || dma == 4)
  2468. {
  2469. printk(KERN_ERR "ERROR! Invalid DMA#%d. GUS Disabled", dma);
  2470. return;
  2471. }
  2472. gus_irq = irq;
  2473. gus_dma = dma;
  2474. gus_dma2 = dma2;
  2475. gus_hw_config = hw_config;
  2476. if (gus_dma2 == -1)
  2477. gus_dma2 = dma;
  2478. /*
  2479.  * Try to identify the GUS model.
  2480.  *
  2481.  *  Versions < 3.6 don't have the digital ASIC. Try to probe it first.
  2482.  */
  2483. save_flags(flags);
  2484. cli();
  2485. outb((0x20), gus_base + 0x0f);
  2486. val = inb(gus_base + 0x0f);
  2487. restore_flags(flags);
  2488. if (gus_pnp_flag || (val != 0xff && (val & 0x06))) /* Should be 0x02?? */
  2489. {
  2490. int             ad_flags = 0;
  2491. if (gus_pnp_flag)
  2492. ad_flags = 0x12345678; /* Interwave "magic" */
  2493. /*
  2494.  * It has the digital ASIC so the card is at least v3.4.
  2495.  * Next try to detect the true model.
  2496.  */
  2497. if (gus_pnp_flag) /* Hack hack hack */
  2498. val = 10;
  2499. else
  2500. val = inb(u_MixSelect);
  2501. /*
  2502.  * Value 255 means pre-3.7 which don't have mixer.
  2503.  * Values 5 thru 9 mean v3.7 which has a ICS2101 mixer.
  2504.  * 10 and above is GUS MAX which has the CS4231 codec/mixer.
  2505.  *
  2506.  */
  2507. if (val == 255 || val < 5)
  2508. {
  2509. model_num = "3.4";
  2510. gus_type = 0x34;
  2511. }
  2512. else if (val < 10)
  2513. {
  2514. model_num = "3.7";
  2515. gus_type = 0x37;
  2516. mixer_type = ICS2101;
  2517. request_region(u_MixSelect, 1, "GUS mixer");
  2518. }
  2519. else
  2520. {
  2521. model_num = "MAX";
  2522. gus_type = 0x40;
  2523. mixer_type = CS4231;
  2524. #ifdef CONFIG_SOUND_GUSMAX
  2525. {
  2526. unsigned char   max_config = 0x40; /* Codec enable */
  2527. if (gus_dma2 == -1)
  2528. gus_dma2 = gus_dma;
  2529. if (gus_dma > 3)
  2530. max_config |= 0x10; /* 16 bit capture DMA */
  2531. if (gus_dma2 > 3)
  2532. max_config |= 0x20; /* 16 bit playback DMA */
  2533. max_config |= (gus_base >> 4) & 0x0f; /* Extract the X from 2X0 */
  2534. outb((max_config), gus_base + 0x106); /* UltraMax control */
  2535. }
  2536. if (ad1848_detect(gus_base + 0x10c, &ad_flags, hw_config->osp))
  2537. {
  2538. char           *name = "GUS MAX";
  2539. int             old_num_mixers = num_mixers;
  2540. if (gus_pnp_flag)
  2541. name = "GUS PnP";
  2542. gus_mic_vol = gus_line_vol = gus_pcm_volume = 100;
  2543. gus_wave_volume = 90;
  2544. have_gus_max = 1;
  2545. if (hw_config->name)
  2546. name = hw_config->name;
  2547. hw_config->slots[1] = ad1848_init(name, gus_base + 0x10c,
  2548. -irq, gus_dma2, /* Playback DMA */
  2549. gus_dma, /* Capture DMA */
  2550. 1, /* Share DMA channels with GF1 */
  2551. hw_config->osp,
  2552. THIS_MODULE);
  2553. if (num_mixers > old_num_mixers)
  2554. {
  2555. /* GUS has it's own mixer map */
  2556. AD1848_REROUTE(SOUND_MIXER_LINE1, SOUND_MIXER_SYNTH);
  2557. AD1848_REROUTE(SOUND_MIXER_LINE2, SOUND_MIXER_CD);
  2558. AD1848_REROUTE(SOUND_MIXER_LINE3, SOUND_MIXER_LINE);
  2559. }
  2560. }
  2561. else
  2562. printk(KERN_WARNING "GUS: No CS4231 ??");
  2563. #else
  2564. printk(KERN_ERR "GUS MAX found, but not compiled inn");
  2565. #endif
  2566. }
  2567. }
  2568. else
  2569. {
  2570. /*
  2571.  * ASIC not detected so the card must be 2.2 or 2.4.
  2572.  * There could still be the 16-bit/mixer daughter card.
  2573.  */
  2574. }
  2575. if (hw_config->name)
  2576. {
  2577. strncpy(tmp, hw_config->name, 45);
  2578. tmp[45] = 0;
  2579. sprintf(tmp2, "%s (%dk)", tmp, (int) gus_mem_size / 1024);
  2580. tmp2[sizeof(tmp2) - 1] = 0;
  2581. }
  2582. else if (gus_pnp_flag)
  2583. {
  2584. sprintf(tmp2, "Gravis UltraSound PnP (%dk)",
  2585. (int) gus_mem_size / 1024);
  2586. }
  2587. else
  2588. sprintf(tmp2, "Gravis UltraSound %s (%dk)", model_num, (int) gus_mem_size / 1024);
  2589. samples = (struct patch_info *)vmalloc((MAX_SAMPLE + 1) * sizeof(*samples));
  2590. if (samples == NULL)
  2591. {
  2592. printk(KERN_WARNING "gus_init: Cant allocate memory for instrument tablesn");
  2593. return;
  2594. }
  2595. conf_printf(tmp2, hw_config);
  2596. tmp2[sizeof(gus_info.name) - 1] = 0;
  2597. strcpy(gus_info.name, tmp2);
  2598. if ((sdev = sound_alloc_synthdev()) == -1)
  2599. printk(KERN_WARNING "gus_init: Too many synthesizersn");
  2600. else
  2601. {
  2602. voice_alloc = &guswave_operations.alloc;
  2603. if (iw_mode)
  2604. guswave_operations.id = "IWAVE";
  2605. hw_config->slots[0] = sdev;
  2606. synth_devs[sdev] = &guswave_operations;
  2607. sequencer_init();
  2608. gus_tmr_install(gus_base + 8);
  2609. }
  2610. reset_sample_memory();
  2611. gus_initialize();
  2612. if ((gus_mem_size > 0) & !gus_no_wave_dma)
  2613. {
  2614. hw_config->slots[4] = -1;
  2615. if ((gus_devnum = sound_install_audiodrv(AUDIO_DRIVER_VERSION,
  2616. "Ultrasound",
  2617. &gus_audio_driver,
  2618. sizeof(struct audio_driver),
  2619. NEEDS_RESTART |
  2620.                     ((!iw_mode && dma2 != dma && dma2 != -1) ?
  2621. DMA_DUPLEX : 0),
  2622. AFMT_U8 | AFMT_S16_LE,
  2623. NULL, dma, dma2)) < 0)
  2624. {
  2625. return;
  2626. }
  2627. hw_config->slots[4] = gus_devnum;
  2628. audio_devs[gus_devnum]->min_fragment = 9; /* 512k */
  2629. audio_devs[gus_devnum]->max_fragment = 11; /* 8k (must match size of bounce_buf */
  2630. audio_devs[gus_devnum]->mixer_dev = -1; /* Next mixer# */
  2631. audio_devs[gus_devnum]->flags |= DMA_HARDSTOP;
  2632. }
  2633. /*
  2634.  *  Mixer dependent initialization.
  2635.  */
  2636. switch (mixer_type)
  2637. {
  2638. case ICS2101:
  2639. gus_mic_vol = gus_line_vol = gus_pcm_volume = 100;
  2640. gus_wave_volume = 90;
  2641. request_region(u_MixSelect, 1, "GUS mixer");
  2642. hw_config->slots[5] = ics2101_mixer_init();
  2643. audio_devs[gus_devnum]->mixer_dev = hw_config->slots[5]; /* Next mixer# */
  2644. return;
  2645. case CS4231:
  2646. /* Initialized elsewhere (ad1848.c) */
  2647. default:
  2648. hw_config->slots[5] = gus_default_mixer_init();
  2649. audio_devs[gus_devnum]->mixer_dev = hw_config->slots[5]; /* Next mixer# */
  2650. return;
  2651. }
  2652. }
  2653. void __exit gus_wave_unload(struct address_info *hw_config)
  2654. {
  2655. #ifdef CONFIG_SOUND_GUSMAX
  2656. if (have_gus_max)
  2657. {
  2658. ad1848_unload(gus_base + 0x10c,
  2659. -gus_irq,
  2660. gus_dma2, /* Playback DMA */
  2661. gus_dma, /* Capture DMA */
  2662. 1); /* Share DMA channels with GF1 */
  2663. }
  2664. #endif
  2665. if (mixer_type == ICS2101)
  2666. {
  2667. release_region(u_MixSelect, 1);
  2668. }
  2669. if (hw_config->slots[0] != -1)
  2670. sound_unload_synthdev(hw_config->slots[0]);
  2671. if (hw_config->slots[1] != -1)
  2672. sound_unload_audiodev(hw_config->slots[1]);
  2673. if (hw_config->slots[2] != -1)
  2674. sound_unload_mididev(hw_config->slots[2]);
  2675. if (hw_config->slots[4] != -1)
  2676. sound_unload_audiodev(hw_config->slots[4]);
  2677. if (hw_config->slots[5] != -1)
  2678. sound_unload_mixerdev(hw_config->slots[5]);
  2679. if(samples)
  2680. vfree(samples);
  2681. samples=NULL;
  2682. }
  2683. static void do_loop_irq(int voice)
  2684. {
  2685. unsigned char   tmp;
  2686. int             mode, parm;
  2687. unsigned long   flags;
  2688. save_flags(flags);
  2689. cli();
  2690. gus_select_voice(voice);
  2691. tmp = gus_read8(0x00);
  2692. tmp &= ~0x20; /*
  2693.  * Disable wave IRQ for this_one voice
  2694.  */
  2695. gus_write8(0x00, tmp);
  2696. if (tmp & 0x03) /* Voice stopped */
  2697. voice_alloc->map[voice] = 0;
  2698. mode = voices[voice].loop_irq_mode;
  2699. voices[voice].loop_irq_mode = 0;
  2700. parm = voices[voice].loop_irq_parm;
  2701. switch (mode)
  2702. {
  2703. case LMODE_FINISH: /*
  2704.  * Final loop finished, shoot volume down
  2705.  */
  2706. if ((int) (gus_read16(0x09) >> 4) < 100) /*
  2707.  * Get current volume
  2708.  */
  2709. {
  2710. gus_voice_off();
  2711. gus_rampoff();
  2712. gus_voice_init(voice);
  2713. break;
  2714. }
  2715. gus_ramp_range(65, 4065);
  2716. gus_ramp_rate(0, 63); /*
  2717.  * Fastest possible rate
  2718.  */
  2719. gus_rampon(0x20 | 0x40); /*
  2720.  * Ramp down, once, irq
  2721.  */
  2722. voices[voice].volume_irq_mode = VMODE_HALT;
  2723. break;
  2724. case LMODE_PCM_STOP:
  2725. pcm_active = 0; /* Signal to the play_next_pcm_block routine */
  2726. case LMODE_PCM:
  2727. {
  2728. pcm_qlen--;
  2729. pcm_head = (pcm_head + 1) % pcm_nblk;
  2730. if (pcm_qlen && pcm_active)
  2731. {
  2732. play_next_pcm_block();
  2733. }
  2734. else
  2735. {
  2736. /* Underrun. Just stop the voice */
  2737. gus_select_voice(0); /* Left channel */
  2738. gus_voice_off();
  2739. gus_rampoff();
  2740. gus_select_voice(1); /* Right channel */
  2741. gus_voice_off();
  2742. gus_rampoff();
  2743. pcm_active = 0;
  2744. }
  2745. /*
  2746.  * If the queue was full before this interrupt, the DMA transfer was
  2747.  * suspended. Let it continue now.
  2748.  */
  2749. if (audio_devs[gus_devnum]->dmap_out->qlen > 0)
  2750. DMAbuf_outputintr(gus_devnum, 0);
  2751. }
  2752. break;
  2753. default:
  2754. break;
  2755. }
  2756. restore_flags(flags);
  2757. }
  2758. static void do_volume_irq(int voice)
  2759. {
  2760. unsigned char tmp;
  2761. int mode, parm;
  2762. unsigned long flags;
  2763. save_flags(flags);
  2764. cli();
  2765. gus_select_voice(voice);
  2766. tmp = gus_read8(0x0d);
  2767. tmp &= ~0x20; /*
  2768.  * Disable volume ramp IRQ
  2769.  */
  2770. gus_write8(0x0d, tmp);
  2771. mode = voices[voice].volume_irq_mode;
  2772. voices[voice].volume_irq_mode = 0;
  2773. parm = voices[voice].volume_irq_parm;
  2774. switch (mode)
  2775. {
  2776. case VMODE_HALT: /* Decay phase finished */
  2777. if (iw_mode)
  2778. gus_write8(0x15, 0x02); /* Set voice deactivate bit of SMSI */
  2779. restore_flags(flags);
  2780. gus_voice_init(voice);
  2781. break;
  2782. case VMODE_ENVELOPE:
  2783. gus_rampoff();
  2784. restore_flags(flags);
  2785. step_envelope(voice);
  2786. break;
  2787. case VMODE_START_NOTE:
  2788. restore_flags(flags);
  2789. guswave_start_note2(voices[voice].dev_pending, voice,
  2790.       voices[voice].note_pending, voices[voice].volume_pending);
  2791. if (voices[voice].kill_pending)
  2792. guswave_kill_note(voices[voice].dev_pending, voice,
  2793.   voices[voice].note_pending, 0);
  2794. if (voices[voice].sample_pending >= 0)
  2795. {
  2796. guswave_set_instr(voices[voice].dev_pending, voice,
  2797. voices[voice].sample_pending);
  2798. voices[voice].sample_pending = -1;
  2799. }
  2800. break;
  2801. default:
  2802. restore_flags(flags);
  2803. }
  2804. restore_flags(flags);
  2805. }
  2806. void gus_voice_irq(void)
  2807. {
  2808. unsigned long wave_ignore = 0, volume_ignore = 0;
  2809. unsigned long voice_bit;
  2810. unsigned char src, voice;
  2811. while (1)
  2812. {
  2813. src = gus_read8(0x0f); /*
  2814.  * Get source info
  2815.  */
  2816. voice = src & 0x1f;
  2817. src &= 0xc0;
  2818. if (src == (0x80 | 0x40))
  2819. return; /*
  2820.  * No interrupt
  2821.  */
  2822. voice_bit = 1 << voice;
  2823. if (!(src & 0x80)) /*
  2824.  * Wave IRQ pending
  2825.  */
  2826. if (!(wave_ignore & voice_bit) && (int) voice < nr_voices) /*
  2827.  * Not done
  2828.  * yet
  2829.  */
  2830. {
  2831. wave_ignore |= voice_bit;
  2832. do_loop_irq(voice);
  2833. }
  2834. if (!(src & 0x40)) /*
  2835.  * Volume IRQ pending
  2836.  */
  2837. if (!(volume_ignore & voice_bit) && (int) voice < nr_voices) /*
  2838.    * Not done
  2839.    * yet
  2840.  */
  2841. {
  2842. volume_ignore |= voice_bit;
  2843. do_volume_irq(voice);
  2844. }
  2845. }
  2846. }
  2847. void guswave_dma_irq(void)
  2848. {
  2849. unsigned char   status;
  2850. status = gus_look8(0x41); /* Get DMA IRQ Status */
  2851. if (status & 0x40) /* DMA interrupt pending */
  2852. switch (active_device)
  2853. {
  2854. case GUS_DEV_WAVE:
  2855. wake_up(&dram_sleeper);
  2856. break;
  2857. case GUS_DEV_PCM_CONTINUE: /* Left channel data transferred */
  2858. gus_write8(0x41, 0); /* Disable GF1 DMA */
  2859. gus_transfer_output_block(pcm_current_dev, pcm_current_buf,
  2860. pcm_current_count,
  2861. pcm_current_intrflag, 1);
  2862. break;
  2863. case GUS_DEV_PCM_DONE: /* Right or mono channel data transferred */
  2864. gus_write8(0x41, 0); /* Disable GF1 DMA */
  2865. if (pcm_qlen < pcm_nblk)
  2866. {
  2867. dma_active = 0;
  2868. if (gus_busy)
  2869. {
  2870. if (audio_devs[gus_devnum]->dmap_out->qlen > 0)
  2871. DMAbuf_outputintr(gus_devnum, 0);
  2872. }
  2873. }
  2874. break;
  2875. default:
  2876. break;
  2877. }
  2878. status = gus_look8(0x49); /*
  2879.  * Get Sampling IRQ Status
  2880.  */
  2881. if (status & 0x40) /*
  2882.  * Sampling Irq pending
  2883.  */
  2884. {
  2885. DMAbuf_inputintr(gus_devnum);
  2886. }
  2887. }
  2888. /*
  2889.  * Timer stuff
  2890.  */
  2891. static volatile int select_addr, data_addr;
  2892. static volatile int curr_timer = 0;
  2893. void gus_timer_command(unsigned int addr, unsigned int val)
  2894. {
  2895. int i;
  2896. outb(((unsigned char) (addr & 0xff)), select_addr);
  2897. for (i = 0; i < 2; i++)
  2898. inb(select_addr);
  2899. outb(((unsigned char) (val & 0xff)), data_addr);
  2900. for (i = 0; i < 2; i++)
  2901. inb(select_addr);
  2902. }
  2903. static void arm_timer(int timer, unsigned int interval)
  2904. {
  2905. curr_timer = timer;
  2906. if (timer == 1)
  2907. {
  2908. gus_write8(0x46, 256 - interval); /* Set counter for timer 1 */
  2909. gus_write8(0x45, 0x04); /* Enable timer 1 IRQ */
  2910. gus_timer_command(0x04, 0x01); /* Start timer 1 */
  2911. }
  2912. else
  2913. {
  2914. gus_write8(0x47, 256 - interval); /* Set counter for timer 2 */
  2915. gus_write8(0x45, 0x08); /* Enable timer 2 IRQ */
  2916. gus_timer_command(0x04, 0x02); /* Start timer 2 */
  2917. }
  2918. gus_timer_enabled = 1;
  2919. }
  2920. static unsigned int gus_tmr_start(int dev, unsigned int usecs_per_tick)
  2921. {
  2922. int timer_no, resolution;
  2923. int divisor;
  2924. if (usecs_per_tick > (256 * 80))
  2925. {
  2926. timer_no = 2;
  2927. resolution = 320; /* usec */
  2928. }
  2929. else
  2930. {
  2931. timer_no = 1;
  2932. resolution = 80; /* usec */
  2933. }
  2934. divisor = (usecs_per_tick + (resolution / 2)) / resolution;
  2935. arm_timer(timer_no, divisor);
  2936. return divisor * resolution;
  2937. }
  2938. static void gus_tmr_disable(int dev)
  2939. {
  2940. gus_write8(0x45, 0); /* Disable both timers */
  2941. gus_timer_enabled = 0;
  2942. }
  2943. static void gus_tmr_restart(int dev)
  2944. {
  2945. if (curr_timer == 1)
  2946. gus_write8(0x45, 0x04); /* Start timer 1 again */
  2947. else
  2948. gus_write8(0x45, 0x08); /* Start timer 2 again */
  2949. gus_timer_enabled = 1;
  2950. }
  2951. static struct sound_lowlev_timer gus_tmr =
  2952. {
  2953. 0,
  2954. 1,
  2955. gus_tmr_start,
  2956. gus_tmr_disable,
  2957. gus_tmr_restart
  2958. };
  2959. static void gus_tmr_install(int io_base)
  2960. {
  2961. struct sound_lowlev_timer *tmr;
  2962. select_addr = io_base;
  2963. data_addr = io_base + 1;
  2964. tmr = &gus_tmr;
  2965. #ifdef THIS_GETS_FIXED
  2966. sound_timer_init(&gus_tmr, "GUS");
  2967. #endif
  2968. }