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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * sound/mpu401.c
  3.  *
  4.  * The low level driver for Roland MPU-401 compatible Midi cards.
  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.  * Alan Cox modularisation, use normal request_irq, use dev_id
  16.  * Bartlomiej Zolnierkiewicz removed some __init to allow using many drivers
  17.  * Chris Rankin Update the module-usage counter for the coprocessor
  18.  * Zwane Mwaikambo Changed attach/unload resource freeing
  19.  */
  20. #include <linux/module.h>
  21. #include <linux/init.h>
  22. #define USE_SEQ_MACROS
  23. #define USE_SIMPLE_MACROS
  24. #include "sound_config.h"
  25. #include "coproc.h"
  26. #include "mpu401.h"
  27. static int      timer_mode = TMR_INTERNAL, timer_caps = TMR_INTERNAL;
  28. struct mpu_config
  29. {
  30. int             base; /*
  31.  * I/O base
  32.  */
  33. int             irq;
  34. int             opened; /*
  35.  * Open mode
  36.  */
  37. int             devno;
  38. int             synthno;
  39. int             uart_mode;
  40. int             initialized;
  41. int             mode;
  42. #define MODE_MIDI 1
  43. #define MODE_SYNTH 2
  44. unsigned char   version, revision;
  45. unsigned int    capabilities;
  46. #define MPU_CAP_INTLG 0x10000000
  47. #define MPU_CAP_SYNC 0x00000010
  48. #define MPU_CAP_FSK 0x00000020
  49. #define MPU_CAP_CLS 0x00000040
  50. #define MPU_CAP_SMPTE  0x00000080
  51. #define MPU_CAP_2PORT 0x00000001
  52. int             timer_flag;
  53. #define MBUF_MAX 10
  54. #define BUFTEST(dc) if (dc->m_ptr >= MBUF_MAX || dc->m_ptr < 0) 
  55. {printk( "MPU: Invalid buffer pointer %d/%d, s=%dn",  dc->m_ptr,  dc->m_left,  dc->m_state);dc->m_ptr--;}
  56.   int             m_busy;
  57.   unsigned char   m_buf[MBUF_MAX];
  58.   int             m_ptr;
  59.   int             m_state;
  60.   int             m_left;
  61.   unsigned char   last_status;
  62.   void            (*inputintr) (int dev, unsigned char data);
  63.   int             shared_irq;
  64.   int            *osp;
  65.   };
  66. #define DATAPORT(base)   (base)
  67. #define COMDPORT(base)   (base+1)
  68. #define STATPORT(base)   (base+1)
  69. static void mpu401_close(int dev);
  70. static inline int mpu401_status(struct mpu_config *devc)
  71. {
  72. return inb(STATPORT(devc->base));
  73. }
  74. #define input_avail(devc) (!(mpu401_status(devc)&INPUT_AVAIL))
  75. #define output_ready(devc) (!(mpu401_status(devc)&OUTPUT_READY))
  76. static inline void write_command(struct mpu_config *devc, unsigned char cmd)
  77. {
  78. outb(cmd, COMDPORT(devc->base));
  79. }
  80. static inline int read_data(struct mpu_config *devc)
  81. {
  82. return inb(DATAPORT(devc->base));
  83. }
  84. static inline void write_data(struct mpu_config *devc, unsigned char byte)
  85. {
  86. outb(byte, DATAPORT(devc->base));
  87. }
  88. #define OUTPUT_READY 0x40
  89. #define INPUT_AVAIL 0x80
  90. #define MPU_ACK 0xFE
  91. #define MPU_RESET 0xFF
  92. #define UART_MODE_ON 0x3F
  93. static struct mpu_config dev_conf[MAX_MIDI_DEV] =
  94. {
  95. {0}
  96. };
  97. static int n_mpu_devs = 0;
  98. static int reset_mpu401(struct mpu_config *devc);
  99. static void set_uart_mode(int dev, struct mpu_config *devc, int arg);
  100. static int mpu_timer_init(int midi_dev);
  101. static void mpu_timer_interrupt(void);
  102. static void timer_ext_event(struct mpu_config *devc, int event, int parm);
  103. static struct synth_info mpu_synth_info_proto = {
  104. "MPU-401 MIDI interface", 
  105. 0, 
  106. SYNTH_TYPE_MIDI, 
  107. MIDI_TYPE_MPU401, 
  108. 0, 128, 
  109. 0, 128, 
  110. SYNTH_CAP_INPUT
  111. };
  112. static struct synth_info mpu_synth_info[MAX_MIDI_DEV];
  113. /*
  114.  * States for the input scanner
  115.  */
  116. #define ST_INIT 0 /* Ready for timing byte or msg */
  117. #define ST_TIMED 1 /* Leading timing byte rcvd */
  118. #define ST_DATABYTE 2 /* Waiting for (nr_left) data bytes */
  119. #define ST_SYSMSG 100 /* System message (sysx etc). */
  120. #define ST_SYSEX 101 /* System exclusive msg */
  121. #define ST_MTC 102 /* Midi Time Code (MTC) qframe msg */
  122. #define ST_SONGSEL 103 /* Song select */
  123. #define ST_SONGPOS 104 /* Song position pointer */
  124. static unsigned char len_tab[] = /* # of data bytes following a status
  125.  */
  126. {
  127. 2, /* 8x */
  128. 2, /* 9x */
  129. 2, /* Ax */
  130. 2, /* Bx */
  131. 1, /* Cx */
  132. 1, /* Dx */
  133. 2, /* Ex */
  134. 0 /* Fx */
  135. };
  136. #define STORE(cmd) 
  137. int len; 
  138. unsigned char obuf[8]; 
  139. cmd; 
  140. seq_input_event(obuf, len); 
  141. }
  142. #define _seqbuf obuf
  143. #define _seqbufptr 0
  144. #define _SEQ_ADVBUF(x) len=x
  145. static int mpu_input_scanner(struct mpu_config *devc, unsigned char midic)
  146. {
  147. switch (devc->m_state)
  148. {
  149. case ST_INIT:
  150. switch (midic)
  151. {
  152. case 0xf8:
  153. /* Timer overflow */
  154. break;
  155. case 0xfc:
  156. printk("<all end>");
  157.   break;
  158. case 0xfd:
  159. if (devc->timer_flag)
  160. mpu_timer_interrupt();
  161. break;
  162. case 0xfe:
  163. return MPU_ACK;
  164. case 0xf0:
  165. case 0xf1:
  166. case 0xf2:
  167. case 0xf3:
  168. case 0xf4:
  169. case 0xf5:
  170. case 0xf6:
  171. case 0xf7:
  172. printk("<Trk data rq #%d>", midic & 0x0f);
  173. break;
  174. case 0xf9:
  175. printk("<conductor rq>");
  176. break;
  177. case 0xff:
  178. devc->m_state = ST_SYSMSG;
  179. break;
  180. default:
  181. if (midic <= 0xef)
  182. {
  183. /* printk( "mpu time: %d ",  midic); */
  184. devc->m_state = ST_TIMED;
  185. }
  186. else
  187. printk("<MPU: Unknown event %02x> ", midic);
  188. }
  189. break;
  190. case ST_TIMED:
  191. {
  192. int msg = ((int) (midic & 0xf0) >> 4);
  193. devc->m_state = ST_DATABYTE;
  194. if (msg < 8) /* Data byte */
  195. {
  196. /* printk( "midi msg (running status) "); */
  197. msg = ((int) (devc->last_status & 0xf0) >> 4);
  198. msg -= 8;
  199. devc->m_left = len_tab[msg] - 1;
  200. devc->m_ptr = 2;
  201. devc->m_buf[0] = devc->last_status;
  202. devc->m_buf[1] = midic;
  203. if (devc->m_left <= 0)
  204. {
  205. devc->m_state = ST_INIT;
  206. do_midi_msg(devc->synthno, devc->m_buf, devc->m_ptr);
  207. devc->m_ptr = 0;
  208. }
  209. }
  210. else if (msg == 0xf) /* MPU MARK */
  211. {
  212. devc->m_state = ST_INIT;
  213. switch (midic)
  214. {
  215. case 0xf8:
  216. /* printk( "NOP "); */
  217. break;
  218. case 0xf9:
  219. /* printk( "meas end "); */
  220. break;
  221. case 0xfc:
  222. /* printk( "data end "); */
  223. break;
  224. default:
  225. printk("Unknown MPU mark %02xn", midic);
  226. }
  227. }
  228. else
  229. {
  230. devc->last_status = midic;
  231. /* printk( "midi msg "); */
  232. msg -= 8;
  233. devc->m_left = len_tab[msg];
  234. devc->m_ptr = 1;
  235. devc->m_buf[0] = midic;
  236. if (devc->m_left <= 0)
  237. {
  238. devc->m_state = ST_INIT;
  239. do_midi_msg(devc->synthno, devc->m_buf, devc->m_ptr);
  240. devc->m_ptr = 0;
  241. }
  242. }
  243. }
  244. break;
  245. case ST_SYSMSG:
  246. switch (midic)
  247. {
  248. case 0xf0:
  249. printk("<SYX>");
  250. devc->m_state = ST_SYSEX;
  251. break;
  252. case 0xf1:
  253. devc->m_state = ST_MTC;
  254. break;
  255. case 0xf2:
  256. devc->m_state = ST_SONGPOS;
  257. devc->m_ptr = 0;
  258. break;
  259. case 0xf3:
  260. devc->m_state = ST_SONGSEL;
  261. break;
  262. case 0xf6:
  263. /* printk( "tune_requestn"); */
  264. devc->m_state = ST_INIT;
  265. /*
  266.  *    Real time messages
  267.  */
  268. case 0xf8:
  269. /* midi clock */
  270. devc->m_state = ST_INIT;
  271. timer_ext_event(devc, TMR_CLOCK, 0);
  272. break;
  273. case 0xfA:
  274. devc->m_state = ST_INIT;
  275. timer_ext_event(devc, TMR_START, 0);
  276. break;
  277. case 0xFB:
  278. devc->m_state = ST_INIT;
  279. timer_ext_event(devc, TMR_CONTINUE, 0);
  280. break;
  281. case 0xFC:
  282. devc->m_state = ST_INIT;
  283. timer_ext_event(devc, TMR_STOP, 0);
  284. break;
  285. case 0xFE:
  286. /* active sensing */
  287. devc->m_state = ST_INIT;
  288. break;
  289. case 0xff:
  290. /* printk( "midi hard reset"); */
  291. devc->m_state = ST_INIT;
  292. break;
  293. default:
  294. printk("unknown MIDI sysmsg %0xn", midic);
  295. devc->m_state = ST_INIT;
  296. }
  297. break;
  298. case ST_MTC:
  299. devc->m_state = ST_INIT;
  300. printk("MTC frame %x02n", midic);
  301. break;
  302. case ST_SYSEX:
  303. if (midic == 0xf7)
  304. {
  305. printk("<EOX>");
  306. devc->m_state = ST_INIT;
  307. }
  308. else
  309. printk("%02x ", midic);
  310. break;
  311. case ST_SONGPOS:
  312. BUFTEST(devc);
  313. devc->m_buf[devc->m_ptr++] = midic;
  314. if (devc->m_ptr == 2)
  315. {
  316. devc->m_state = ST_INIT;
  317. devc->m_ptr = 0;
  318. timer_ext_event(devc, TMR_SPP,
  319. ((devc->m_buf[1] & 0x7f) << 7) |
  320. (devc->m_buf[0] & 0x7f));
  321. }
  322. break;
  323. case ST_DATABYTE:
  324. BUFTEST(devc);
  325. devc->m_buf[devc->m_ptr++] = midic;
  326. if ((--devc->m_left) <= 0)
  327. {
  328. devc->m_state = ST_INIT;
  329. do_midi_msg(devc->synthno, devc->m_buf, devc->m_ptr);
  330. devc->m_ptr = 0;
  331. }
  332. break;
  333. default:
  334. printk("Bad state %d ", devc->m_state);
  335. devc->m_state = ST_INIT;
  336. }
  337. return 1;
  338. }
  339. static void mpu401_input_loop(struct mpu_config *devc)
  340. {
  341. unsigned long flags;
  342. int busy;
  343. int n;
  344. save_flags(flags);
  345. cli();
  346. busy = devc->m_busy;
  347. devc->m_busy = 1;
  348. restore_flags(flags);
  349. if (busy) /* Already inside the scanner */
  350. return;
  351. n = 50;
  352. while (input_avail(devc) && n-- > 0)
  353. {
  354. unsigned char c = read_data(devc);
  355. if (devc->mode == MODE_SYNTH)
  356. {
  357. mpu_input_scanner(devc, c);
  358. }
  359. else if (devc->opened & OPEN_READ && devc->inputintr != NULL)
  360. devc->inputintr(devc->devno, c);
  361. }
  362. devc->m_busy = 0;
  363. }
  364. int intchk_mpu401(void *dev_id)
  365. {
  366. struct mpu_config *devc;
  367. int dev = (int) dev_id;
  368. devc = &dev_conf[dev];
  369. return input_avail(devc);
  370. }
  371. void mpuintr(int irq, void *dev_id, struct pt_regs *dummy)
  372. {
  373. struct mpu_config *devc;
  374. int dev = (int) dev_id;
  375. sti();
  376. devc = &dev_conf[dev];
  377. if (input_avail(devc))
  378. {
  379. if (devc->base != 0 && (devc->opened & OPEN_READ || devc->mode == MODE_SYNTH))
  380. mpu401_input_loop(devc);
  381. else
  382. {
  383. /* Dummy read (just to acknowledge the interrupt) */
  384. read_data(devc);
  385. }
  386. }
  387. }
  388. static int mpu401_open(int dev, int mode,
  389.     void            (*input) (int dev, unsigned char data),
  390.     void            (*output) (int dev)
  391. )
  392. {
  393. int err;
  394. struct mpu_config *devc;
  395. struct coproc_operations *coprocessor;
  396. if (dev < 0 || dev >= num_midis || midi_devs[dev] == NULL)
  397. return -ENXIO;
  398. devc = &dev_conf[dev];
  399. if (devc->opened)
  400.   return -EBUSY;
  401. /*
  402.  *  Verify that the device is really running.
  403.  *  Some devices (such as Ensoniq SoundScape don't
  404.  *  work before the on board processor (OBP) is initialized
  405.  *  by downloading its microcode.
  406.  */
  407. if (!devc->initialized)
  408. {
  409. if (mpu401_status(devc) == 0xff) /* Bus float */
  410. {
  411. printk(KERN_ERR "mpu401: Device not initialized properlyn");
  412. return -EIO;
  413. }
  414. reset_mpu401(devc);
  415. }
  416. if ( (coprocessor = midi_devs[dev]->coproc) != NULL )
  417. {
  418. if (coprocessor->owner)
  419. __MOD_INC_USE_COUNT(coprocessor->owner);
  420. if ((err = coprocessor->open(coprocessor->devc, COPR_MIDI)) < 0)
  421. {
  422. printk(KERN_WARNING "MPU-401: Can't access coprocessor devicen");
  423. mpu401_close(dev);
  424. return err;
  425. }
  426. }
  427. set_uart_mode(dev, devc, 1);
  428. devc->mode = MODE_MIDI;
  429. devc->synthno = 0;
  430. mpu401_input_loop(devc);
  431. devc->inputintr = input;
  432. devc->opened = mode;
  433. return 0;
  434. }
  435. static void mpu401_close(int dev)
  436. {
  437. struct mpu_config *devc;
  438. struct coproc_operations *coprocessor;
  439. devc = &dev_conf[dev];
  440. if (devc->uart_mode)
  441. reset_mpu401(devc); /*
  442.  * This disables the UART mode
  443.  */
  444. devc->mode = 0;
  445. devc->inputintr = NULL;
  446. coprocessor = midi_devs[dev]->coproc;
  447. if (coprocessor) {
  448. coprocessor->close(coprocessor->devc, COPR_MIDI);
  449. if (coprocessor->owner)
  450. __MOD_DEC_USE_COUNT(coprocessor->owner);
  451. }
  452. devc->opened = 0;
  453. }
  454. static int mpu401_out(int dev, unsigned char midi_byte)
  455. {
  456. int timeout;
  457. unsigned long flags;
  458. struct mpu_config *devc;
  459. devc = &dev_conf[dev];
  460. /*
  461.  * Sometimes it takes about 30000 loops before the output becomes ready
  462.  * (After reset). Normally it takes just about 10 loops.
  463.  */
  464. for (timeout = 30000; timeout > 0 && !output_ready(devc); timeout--);
  465. save_flags(flags);
  466. cli();
  467. if (!output_ready(devc))
  468. {
  469. printk(KERN_WARNING "mpu401: Send data timeoutn");
  470. restore_flags(flags);
  471. return 0;
  472. }
  473. write_data(devc, midi_byte);
  474. restore_flags(flags);
  475. return 1;
  476. }
  477. static int mpu401_command(int dev, mpu_command_rec * cmd)
  478. {
  479. int i, timeout, ok;
  480. int ret = 0;
  481. unsigned long   flags;
  482. struct mpu_config *devc;
  483. devc = &dev_conf[dev];
  484. if (devc->uart_mode) /*
  485.  * Not possible in UART mode
  486.  */
  487. {
  488. printk(KERN_WARNING "mpu401: commands not possible in the UART moden");
  489. return -EINVAL;
  490. }
  491. /*
  492.  * Test for input since pending input seems to block the output.
  493.  */
  494. if (input_avail(devc))
  495. mpu401_input_loop(devc);
  496. /*
  497.  * Sometimes it takes about 50000 loops before the output becomes ready
  498.  * (After reset). Normally it takes just about 10 loops.
  499.  */
  500. timeout = 50000;
  501. retry:
  502. if (timeout-- <= 0)
  503. {
  504. printk(KERN_WARNING "mpu401: Command (0x%x) timeoutn", (int) cmd->cmd);
  505. return -EIO;
  506. }
  507. save_flags(flags);
  508. cli();
  509. if (!output_ready(devc))
  510. {
  511.   restore_flags(flags);
  512.   goto retry;
  513. }
  514. write_command(devc, cmd->cmd);
  515. ok = 0;
  516. for (timeout = 50000; timeout > 0 && !ok; timeout--)
  517. {
  518. if (input_avail(devc))
  519. {
  520. if (devc->opened && devc->mode == MODE_SYNTH)
  521. {
  522. if (mpu_input_scanner(devc, read_data(devc)) == MPU_ACK)
  523. ok = 1;
  524. }
  525. else
  526. {
  527. /* Device is not currently open. Use simpler method */
  528. if (read_data(devc) == MPU_ACK)
  529. ok = 1;
  530. }
  531. }
  532. }
  533. if (!ok)
  534. {
  535. restore_flags(flags);
  536. return -EIO;
  537. }
  538. if (cmd->nr_args)
  539. {
  540. for (i = 0; i < cmd->nr_args; i++)
  541. {
  542. for (timeout = 3000; timeout > 0 && !output_ready(devc); timeout--);
  543. if (!mpu401_out(dev, cmd->data[i]))
  544. {
  545. restore_flags(flags);
  546. printk(KERN_WARNING "mpu401: Command (0x%x), parm send failed.n", (int) cmd->cmd);
  547. return -EIO;
  548. }
  549. }
  550. }
  551. ret = 0;
  552. cmd->data[0] = 0;
  553. if (cmd->nr_returns)
  554. {
  555. for (i = 0; i < cmd->nr_returns; i++)
  556. {
  557. ok = 0;
  558. for (timeout = 5000; timeout > 0 && !ok; timeout--)
  559. if (input_avail(devc))
  560. {
  561. cmd->data[i] = read_data(devc);
  562. ok = 1;
  563. }
  564. if (!ok)
  565. {
  566. restore_flags(flags);
  567. return -EIO;
  568. }
  569. }
  570. }
  571. restore_flags(flags);
  572. return ret;
  573. }
  574. static int mpu_cmd(int dev, int cmd, int data)
  575. {
  576. int ret;
  577. static mpu_command_rec rec;
  578. rec.cmd = cmd & 0xff;
  579. rec.nr_args = ((cmd & 0xf0) == 0xE0);
  580. rec.nr_returns = ((cmd & 0xf0) == 0xA0);
  581. rec.data[0] = data & 0xff;
  582. if ((ret = mpu401_command(dev, &rec)) < 0)
  583. return ret;
  584. return (unsigned char) rec.data[0];
  585. }
  586. static int mpu401_prefix_cmd(int dev, unsigned char status)
  587. {
  588. struct mpu_config *devc = &dev_conf[dev];
  589. if (devc->uart_mode)
  590. return 1;
  591. if (status < 0xf0)
  592. {
  593. if (mpu_cmd(dev, 0xD0, 0) < 0)
  594. return 0;
  595. return 1;
  596. }
  597. switch (status)
  598. {
  599. case 0xF0:
  600. if (mpu_cmd(dev, 0xDF, 0) < 0)
  601. return 0;
  602. return 1;
  603. default:
  604. return 0;
  605. }
  606. }
  607. static int mpu401_start_read(int dev)
  608. {
  609. return 0;
  610. }
  611. static int mpu401_end_read(int dev)
  612. {
  613. return 0;
  614. }
  615. static int mpu401_ioctl(int dev, unsigned cmd, caddr_t arg)
  616. {
  617. struct mpu_config *devc;
  618. mpu_command_rec rec;
  619. int val, ret;
  620. devc = &dev_conf[dev];
  621. switch (cmd) 
  622. {
  623. case SNDCTL_MIDI_MPUMODE:
  624. if (!(devc->capabilities & MPU_CAP_INTLG)) { /* No intelligent mode */
  625. printk(KERN_WARNING "mpu401: Intelligent mode not supported by the HWn");
  626. return -EINVAL;
  627. }
  628. if (get_user(val, (int *)arg))
  629. return -EFAULT;
  630. set_uart_mode(dev, devc, !val);
  631. return 0;
  632. case SNDCTL_MIDI_MPUCMD:
  633. if (copy_from_user(&rec, arg, sizeof(rec)))
  634. return -EFAULT;
  635. if ((ret = mpu401_command(dev, &rec)) < 0)
  636. return ret;
  637. if (copy_to_user(arg, &rec, sizeof(rec)))
  638. return -EFAULT;
  639. return 0;
  640. default:
  641. return -EINVAL;
  642. }
  643. }
  644. static void mpu401_kick(int dev)
  645. {
  646. }
  647. static int mpu401_buffer_status(int dev)
  648. {
  649. return 0; /*
  650.  * No data in buffers
  651.  */
  652. }
  653. static int mpu_synth_ioctl(int dev,
  654. unsigned int cmd, caddr_t arg)
  655. {
  656. int midi_dev;
  657. struct mpu_config *devc;
  658. midi_dev = synth_devs[dev]->midi_dev;
  659. if (midi_dev < 0 || midi_dev > num_midis || midi_devs[midi_dev] == NULL)
  660. return -ENXIO;
  661. devc = &dev_conf[midi_dev];
  662. switch (cmd)
  663. {
  664. case SNDCTL_SYNTH_INFO:
  665. memcpy((&((char *) arg)[0]), (char *) &mpu_synth_info[midi_dev], sizeof(struct synth_info));
  666. return 0;
  667. case SNDCTL_SYNTH_MEMAVL:
  668. return 0x7fffffff;
  669. default:
  670. return -EINVAL;
  671. }
  672. }
  673. static int mpu_synth_open(int dev, int mode)
  674. {
  675. int midi_dev, err;
  676. struct mpu_config *devc;
  677. struct coproc_operations *coprocessor;
  678. midi_dev = synth_devs[dev]->midi_dev;
  679. if (midi_dev < 0 || midi_dev > num_midis || midi_devs[midi_dev] == NULL)
  680. return -ENXIO;
  681. devc = &dev_conf[midi_dev];
  682. /*
  683.  *  Verify that the device is really running.
  684.  *  Some devices (such as Ensoniq SoundScape don't
  685.  *  work before the on board processor (OBP) is initialized
  686.  *  by downloading its microcode.
  687.  */
  688. if (!devc->initialized)
  689. {
  690. if (mpu401_status(devc) == 0xff) /* Bus float */
  691. {
  692. printk(KERN_ERR "mpu401: Device not initialized properlyn");
  693. return -EIO;
  694. }
  695. reset_mpu401(devc);
  696. }
  697. if (devc->opened)
  698. return -EBUSY;
  699. devc->mode = MODE_SYNTH;
  700. devc->synthno = dev;
  701. devc->inputintr = NULL;
  702. coprocessor = midi_devs[midi_dev]->coproc;
  703. if (coprocessor) {
  704. if (coprocessor->owner)
  705. __MOD_INC_USE_COUNT(coprocessor->owner);
  706. if ((err = coprocessor->open(coprocessor->devc, COPR_MIDI)) < 0)
  707. {
  708. printk(KERN_WARNING "mpu401: Can't access coprocessor devicen");
  709. return err;
  710. }
  711. }
  712. devc->opened = mode;
  713. reset_mpu401(devc);
  714. if (mode & OPEN_READ)
  715. {
  716. mpu_cmd(midi_dev, 0x8B, 0); /* Enable data in stop mode */
  717. mpu_cmd(midi_dev, 0x34, 0); /* Return timing bytes in stop mode */
  718. mpu_cmd(midi_dev, 0x87, 0); /* Enable pitch & controller */
  719. }
  720. return 0;
  721. }
  722. static void mpu_synth_close(int dev)
  723. int midi_dev;
  724. struct mpu_config *devc;
  725. struct coproc_operations *coprocessor;
  726. midi_dev = synth_devs[dev]->midi_dev;
  727. devc = &dev_conf[midi_dev];
  728. mpu_cmd(midi_dev, 0x15, 0); /* Stop recording, playback and MIDI */
  729. mpu_cmd(midi_dev, 0x8a, 0); /* Disable data in stopped mode */
  730. devc->inputintr = NULL;
  731. coprocessor = midi_devs[midi_dev]->coproc;
  732. if (coprocessor) {
  733. coprocessor->close(coprocessor->devc, COPR_MIDI);
  734. if (coprocessor->owner)
  735. __MOD_DEC_USE_COUNT(coprocessor->owner);
  736. }
  737. devc->opened = 0;
  738. devc->mode = 0;
  739. }
  740. #define MIDI_SYNTH_NAME "MPU-401 UART Midi"
  741. #define MIDI_SYNTH_CAPS SYNTH_CAP_INPUT
  742. #include "midi_synth.h"
  743. static struct synth_operations mpu401_synth_proto =
  744. {
  745. owner: THIS_MODULE,
  746. id: "MPU401",
  747. info: NULL,
  748. midi_dev: 0,
  749. synth_type: SYNTH_TYPE_MIDI,
  750. synth_subtype: 0,
  751. open: mpu_synth_open,
  752. close: mpu_synth_close,
  753. ioctl: mpu_synth_ioctl,
  754. kill_note: midi_synth_kill_note,
  755. start_note: midi_synth_start_note,
  756. set_instr: midi_synth_set_instr,
  757. reset: midi_synth_reset,
  758. hw_control: midi_synth_hw_control,
  759. load_patch: midi_synth_load_patch,
  760. aftertouch: midi_synth_aftertouch,
  761. controller: midi_synth_controller,
  762. panning: midi_synth_panning,
  763. bender: midi_synth_bender,
  764. setup_voice: midi_synth_setup_voice,
  765. send_sysex: midi_synth_send_sysex
  766. };
  767. static struct synth_operations *mpu401_synth_operations[MAX_MIDI_DEV];
  768. static struct midi_operations mpu401_midi_proto =
  769. {
  770. owner: THIS_MODULE,
  771. info: {"MPU-401 Midi", 0, MIDI_CAP_MPU401, SNDCARD_MPU401},
  772. in_info: {0},
  773. open: mpu401_open,
  774. close: mpu401_close,
  775. ioctl: mpu401_ioctl,
  776. outputc: mpu401_out,
  777. start_read: mpu401_start_read,
  778. end_read: mpu401_end_read,
  779. kick: mpu401_kick,
  780. buffer_status: mpu401_buffer_status,
  781. prefix_cmd: mpu401_prefix_cmd
  782. };
  783. static struct midi_operations mpu401_midi_operations[MAX_MIDI_DEV];
  784. static void mpu401_chk_version(int n, struct mpu_config *devc)
  785. {
  786. int tmp;
  787. unsigned long flags;
  788. devc->version = devc->revision = 0;
  789. save_flags(flags);
  790. cli();
  791. if ((tmp = mpu_cmd(n, 0xAC, 0)) < 0)
  792. {
  793. restore_flags(flags);
  794. return;
  795. }
  796. if ((tmp & 0xf0) > 0x20) /* Why it's larger than 2.x ??? */
  797. {
  798. restore_flags(flags);
  799. return;
  800. }
  801. devc->version = tmp;
  802. if ((tmp = mpu_cmd(n, 0xAD, 0)) < 0)
  803. {
  804. devc->version = 0;
  805. restore_flags(flags);
  806. return;
  807. }
  808. devc->revision = tmp;
  809. restore_flags(flags);
  810. }
  811. int attach_mpu401(struct address_info *hw_config, struct module *owner)
  812. {
  813. unsigned long flags;
  814. char revision_char;
  815. int m, ret;
  816. struct mpu_config *devc;
  817. hw_config->slots[1] = -1;
  818. m = sound_alloc_mididev();
  819. if (m == -1)
  820. {
  821. printk(KERN_WARNING "MPU-401: Too many midi devices detectedn");
  822. ret = -ENOMEM;
  823. goto out_err;
  824. }
  825. devc = &dev_conf[m];
  826. devc->base = hw_config->io_base;
  827. devc->osp = hw_config->osp;
  828. devc->irq = hw_config->irq;
  829. devc->opened = 0;
  830. devc->uart_mode = 0;
  831. devc->initialized = 0;
  832. devc->version = 0;
  833. devc->revision = 0;
  834. devc->capabilities = 0;
  835. devc->timer_flag = 0;
  836. devc->m_busy = 0;
  837. devc->m_state = ST_INIT;
  838. devc->shared_irq = hw_config->always_detect;
  839. devc->irq = hw_config->irq;
  840. if (devc->irq < 0)
  841. {
  842. devc->irq *= -1;
  843. devc->shared_irq = 1;
  844. }
  845. if (!hw_config->always_detect)
  846. {
  847. /* Verify the hardware again */
  848. if (!reset_mpu401(devc))
  849. {
  850. printk(KERN_WARNING "mpu401: Device didn't respondn");
  851. ret = -ENODEV;
  852. goto out_mididev;
  853. }
  854. if (!devc->shared_irq)
  855. {
  856. if (request_irq(devc->irq, mpuintr, 0, "mpu401", (void *)m) < 0)
  857. {
  858. printk(KERN_WARNING "mpu401: Failed to allocate IRQ%dn", devc->irq);
  859. ret = -ENOMEM;
  860. goto out_mididev;
  861. }
  862. }
  863. save_flags(flags);
  864. cli();
  865. mpu401_chk_version(m, devc);
  866. if (devc->version == 0)
  867. mpu401_chk_version(m, devc);
  868. restore_flags(flags);
  869. }
  870. if (!request_region(hw_config->io_base, 2, "mpu401"))
  871. {
  872. ret = -ENOMEM;
  873. goto out_irq;
  874. }
  875. if (devc->version != 0)
  876. if (mpu_cmd(m, 0xC5, 0) >= 0) /* Set timebase OK */
  877. if (mpu_cmd(m, 0xE0, 120) >= 0) /* Set tempo OK */
  878. devc->capabilities |= MPU_CAP_INTLG; /* Supports intelligent mode */
  879. mpu401_synth_operations[m] = (struct synth_operations *)kmalloc(sizeof(struct synth_operations), GFP_KERNEL);
  880. if (mpu401_synth_operations[m] == NULL)
  881. {
  882. printk(KERN_ERR "mpu401: Can't allocate memoryn");
  883. ret = -ENOMEM;
  884. goto out_resource;
  885. }
  886. if (!(devc->capabilities & MPU_CAP_INTLG)) /* No intelligent mode */
  887. {
  888. memcpy((char *) mpu401_synth_operations[m],
  889. (char *) &std_midi_synth,
  890.  sizeof(struct synth_operations));
  891. }
  892. else
  893. {
  894. memcpy((char *) mpu401_synth_operations[m],
  895. (char *) &mpu401_synth_proto,
  896.  sizeof(struct synth_operations));
  897. }
  898. if (owner)
  899. mpu401_synth_operations[m]->owner = owner;
  900. memcpy((char *) &mpu401_midi_operations[m],
  901.        (char *) &mpu401_midi_proto,
  902.        sizeof(struct midi_operations));
  903. mpu401_midi_operations[m].converter = mpu401_synth_operations[m];
  904. memcpy((char *) &mpu_synth_info[m],
  905.        (char *) &mpu_synth_info_proto,
  906.        sizeof(struct synth_info));
  907. n_mpu_devs++;
  908. if (devc->version == 0x20 && devc->revision >= 0x07) /* MusicQuest interface */
  909. {
  910. int ports = (devc->revision & 0x08) ? 32 : 16;
  911. devc->capabilities |= MPU_CAP_SYNC | MPU_CAP_SMPTE |
  912. MPU_CAP_CLS | MPU_CAP_2PORT;
  913. revision_char = (devc->revision == 0x7f) ? 'M' : ' ';
  914. sprintf(mpu_synth_info[m].name, "MQX-%d%c MIDI Interface #%d",
  915. ports,
  916. revision_char,
  917. n_mpu_devs);
  918. }
  919. else
  920. {
  921. revision_char = devc->revision ? devc->revision + '@' : ' ';
  922. if ((int) devc->revision > ('Z' - '@'))
  923. revision_char = '+';
  924. devc->capabilities |= MPU_CAP_SYNC | MPU_CAP_FSK;
  925. if (hw_config->name)
  926. sprintf(mpu_synth_info[m].name, "%s (MPU401)", hw_config->name);
  927. else
  928. sprintf(mpu_synth_info[m].name,
  929. "MPU-401 %d.%d%c Midi interface #%d",
  930. (int) (devc->version & 0xf0) >> 4,
  931. devc->version & 0x0f,
  932. revision_char,
  933. n_mpu_devs);
  934. }
  935. strcpy(mpu401_midi_operations[m].info.name,
  936.        mpu_synth_info[m].name);
  937. conf_printf(mpu_synth_info[m].name, hw_config);
  938. mpu401_synth_operations[m]->midi_dev = devc->devno = m;
  939. mpu401_synth_operations[devc->devno]->info = &mpu_synth_info[devc->devno];
  940. if (devc->capabilities & MPU_CAP_INTLG) /* Intelligent mode */
  941. hw_config->slots[2] = mpu_timer_init(m);
  942. midi_devs[m] = &mpu401_midi_operations[devc->devno];
  943. if (owner)
  944. midi_devs[m]->owner = owner;
  945. hw_config->slots[1] = m;
  946. sequencer_init();
  947. return 0;
  948. out_resource:
  949. release_region(hw_config->io_base, 2);
  950. out_irq:
  951. free_irq(devc->irq, (void *)m);
  952. out_mididev:
  953. sound_unload_mididev(m);
  954. out_err:
  955. return ret;
  956. }
  957. static int reset_mpu401(struct mpu_config *devc)
  958. {
  959. unsigned long flags;
  960. int ok, timeout, n;
  961. int timeout_limit;
  962. /*
  963.  * Send the RESET command. Try again if no success at the first time.
  964.  * (If the device is in the UART mode, it will not ack the reset cmd).
  965.  */
  966. ok = 0;
  967. timeout_limit = devc->initialized ? 30000 : 100000;
  968. devc->initialized = 1;
  969. for (n = 0; n < 2 && !ok; n++)
  970. {
  971. for (timeout = timeout_limit; timeout > 0 && !ok; timeout--)
  972.   ok = output_ready(devc);
  973. write_command(devc, MPU_RESET); /*
  974.    * Send MPU-401 RESET Command
  975.  */
  976. /*
  977.  * Wait at least 25 msec. This method is not accurate so let's make the
  978.  * loop bit longer. Cannot sleep since this is called during boot.
  979.  */
  980. for (timeout = timeout_limit * 2; timeout > 0 && !ok; timeout--)
  981. {
  982. save_flags(flags);
  983. cli();
  984. if (input_avail(devc))
  985. if (read_data(devc) == MPU_ACK)
  986. ok = 1;
  987. restore_flags(flags);
  988. }
  989. }
  990. devc->m_state = ST_INIT;
  991. devc->m_ptr = 0;
  992. devc->m_left = 0;
  993. devc->last_status = 0;
  994. devc->uart_mode = 0;
  995. return ok;
  996. }
  997. static void set_uart_mode(int dev, struct mpu_config *devc, int arg)
  998. {
  999. if (!arg && (devc->capabilities & MPU_CAP_INTLG))
  1000. return;
  1001. if ((devc->uart_mode == 0) == (arg == 0))
  1002. return; /* Already set */
  1003. reset_mpu401(devc); /* This exits the uart mode */
  1004. if (arg)
  1005. {
  1006. if (mpu_cmd(dev, UART_MODE_ON, 0) < 0)
  1007. {
  1008. printk(KERN_ERR "mpu401: Can't enter UART moden");
  1009. devc->uart_mode = 0;
  1010. return;
  1011. }
  1012. }
  1013. devc->uart_mode = arg;
  1014. }
  1015. int probe_mpu401(struct address_info *hw_config)
  1016. {
  1017. int ok = 0;
  1018. struct mpu_config tmp_devc;
  1019. if (check_region(hw_config->io_base, 2))
  1020. {
  1021. printk(KERN_ERR "mpu401: I/O port %x already in usenn", hw_config->io_base);
  1022. return 0;
  1023. }
  1024. tmp_devc.base = hw_config->io_base;
  1025. tmp_devc.irq = hw_config->irq;
  1026. tmp_devc.initialized = 0;
  1027. tmp_devc.opened = 0;
  1028. tmp_devc.osp = hw_config->osp;
  1029. if (hw_config->always_detect)
  1030. return 1;
  1031. if (inb(hw_config->io_base + 1) == 0xff)
  1032. {
  1033. DDB(printk("MPU401: Port %x looks dead.n", hw_config->io_base));
  1034. return 0; /* Just bus float? */
  1035. }
  1036. ok = reset_mpu401(&tmp_devc);
  1037. if (!ok)
  1038. {
  1039. DDB(printk("MPU401: Reset failed on port %xn", hw_config->io_base));
  1040. }
  1041. return ok;
  1042. }
  1043. void unload_mpu401(struct address_info *hw_config)
  1044. {
  1045. void *p;
  1046. int n=hw_config->slots[1];
  1047. if (n != -1) {
  1048. release_region(hw_config->io_base, 2);
  1049. if (hw_config->always_detect == 0 && hw_config->irq > 0)
  1050. free_irq(hw_config->irq, (void *)n);
  1051. p=mpu401_synth_operations[n];
  1052. sound_unload_mididev(n);
  1053. sound_unload_timerdev(hw_config->slots[2]);
  1054. if(p)
  1055. kfree(p);
  1056. }
  1057. }
  1058. /*****************************************************
  1059.  *      Timer stuff
  1060.  ****************************************************/
  1061. static volatile int timer_initialized = 0, timer_open = 0, tmr_running = 0;
  1062. static volatile int curr_tempo, curr_timebase, hw_timebase;
  1063. static int      max_timebase = 8; /* 8*24=192 ppqn */
  1064. static volatile unsigned long next_event_time;
  1065. static volatile unsigned long curr_ticks, curr_clocks;
  1066. static unsigned long prev_event_time;
  1067. static int      metronome_mode;
  1068. static unsigned long clocks2ticks(unsigned long clocks)
  1069. {
  1070. /*
  1071.  * The MPU-401 supports just a limited set of possible timebase values.
  1072.  * Since the applications require more choices, the driver has to
  1073.  * program the HW to do its best and to convert between the HW and
  1074.  * actual timebases.
  1075.  */
  1076. return ((clocks * curr_timebase) + (hw_timebase / 2)) / hw_timebase;
  1077. }
  1078. static void set_timebase(int midi_dev, int val)
  1079. {
  1080. int hw_val;
  1081. if (val < 48)
  1082. val = 48;
  1083. if (val > 1000)
  1084. val = 1000;
  1085. hw_val = val;
  1086. hw_val = (hw_val + 12) / 24;
  1087. if (hw_val > max_timebase)
  1088. hw_val = max_timebase;
  1089. if (mpu_cmd(midi_dev, 0xC0 | (hw_val & 0x0f), 0) < 0)
  1090. {
  1091. printk(KERN_WARNING "mpu401: Can't set HW timebase to %dn", hw_val * 24);
  1092. return;
  1093. }
  1094. hw_timebase = hw_val * 24;
  1095. curr_timebase = val;
  1096. }
  1097. static void tmr_reset(void)
  1098. {
  1099. unsigned long flags;
  1100. save_flags(flags);
  1101. cli();
  1102. next_event_time = (unsigned long) -1;
  1103. prev_event_time = 0;
  1104. curr_ticks = curr_clocks = 0;
  1105. restore_flags(flags);
  1106. }
  1107. static void set_timer_mode(int midi_dev)
  1108. {
  1109. if (timer_mode & TMR_MODE_CLS)
  1110. mpu_cmd(midi_dev, 0x3c, 0); /* Use CLS sync */
  1111. else if (timer_mode & TMR_MODE_SMPTE)
  1112. mpu_cmd(midi_dev, 0x3d, 0); /* Use SMPTE sync */
  1113. if (timer_mode & TMR_INTERNAL)
  1114. {
  1115.   mpu_cmd(midi_dev, 0x80, 0); /* Use MIDI sync */
  1116. }
  1117. else
  1118. {
  1119. if (timer_mode & (TMR_MODE_MIDI | TMR_MODE_CLS))
  1120. {
  1121. mpu_cmd(midi_dev, 0x82, 0); /* Use MIDI sync */
  1122. mpu_cmd(midi_dev, 0x91, 0); /* Enable ext MIDI ctrl */
  1123. }
  1124. else if (timer_mode & TMR_MODE_FSK)
  1125. mpu_cmd(midi_dev, 0x81, 0); /* Use FSK sync */
  1126. }
  1127. }
  1128. static void stop_metronome(int midi_dev)
  1129. {
  1130. mpu_cmd(midi_dev, 0x84, 0); /* Disable metronome */
  1131. }
  1132. static void setup_metronome(int midi_dev)
  1133. {
  1134. int numerator, denominator;
  1135. int clks_per_click, num_32nds_per_beat;
  1136. int beats_per_measure;
  1137. numerator = ((unsigned) metronome_mode >> 24) & 0xff;
  1138. denominator = ((unsigned) metronome_mode >> 16) & 0xff;
  1139. clks_per_click = ((unsigned) metronome_mode >> 8) & 0xff;
  1140. num_32nds_per_beat = (unsigned) metronome_mode & 0xff;
  1141. beats_per_measure = (numerator * 4) >> denominator;
  1142. if (!metronome_mode)
  1143. mpu_cmd(midi_dev, 0x84, 0); /* Disable metronome */
  1144. else
  1145. {
  1146. mpu_cmd(midi_dev, 0xE4, clks_per_click);
  1147. mpu_cmd(midi_dev, 0xE6, beats_per_measure);
  1148. mpu_cmd(midi_dev, 0x83, 0); /* Enable metronome without accents */
  1149. }
  1150. }
  1151. static int mpu_start_timer(int midi_dev)
  1152. {
  1153. tmr_reset();
  1154. set_timer_mode(midi_dev);
  1155. if (tmr_running)
  1156. return TIMER_NOT_ARMED; /* Already running */
  1157. if (timer_mode & TMR_INTERNAL)
  1158. {
  1159. mpu_cmd(midi_dev, 0x02, 0); /* Send MIDI start */
  1160. tmr_running = 1;
  1161. return TIMER_NOT_ARMED;
  1162. }
  1163. else
  1164. {
  1165. mpu_cmd(midi_dev, 0x35, 0); /* Enable mode messages to PC */
  1166. mpu_cmd(midi_dev, 0x38, 0); /* Enable sys common messages to PC */
  1167. mpu_cmd(midi_dev, 0x39, 0); /* Enable real time messages to PC */
  1168. mpu_cmd(midi_dev, 0x97, 0); /* Enable system exclusive messages to PC */
  1169. }
  1170. return TIMER_ARMED;
  1171. }
  1172. static int mpu_timer_open(int dev, int mode)
  1173. {
  1174. int midi_dev = sound_timer_devs[dev]->devlink;
  1175. if (timer_open)
  1176. return -EBUSY;
  1177. tmr_reset();
  1178. curr_tempo = 50;
  1179. mpu_cmd(midi_dev, 0xE0, 50);
  1180. curr_timebase = hw_timebase = 120;
  1181. set_timebase(midi_dev, 120);
  1182. timer_open = 1;
  1183. metronome_mode = 0;
  1184. set_timer_mode(midi_dev);
  1185. mpu_cmd(midi_dev, 0xe7, 0x04); /* Send all clocks to host */
  1186. mpu_cmd(midi_dev, 0x95, 0); /* Enable clock to host */
  1187. return 0;
  1188. }
  1189. static void mpu_timer_close(int dev)
  1190. {
  1191. int midi_dev = sound_timer_devs[dev]->devlink;
  1192. timer_open = tmr_running = 0;
  1193. mpu_cmd(midi_dev, 0x15, 0); /* Stop all */
  1194. mpu_cmd(midi_dev, 0x94, 0); /* Disable clock to host */
  1195. mpu_cmd(midi_dev, 0x8c, 0); /* Disable measure end messages to host */
  1196. stop_metronome(midi_dev);
  1197. }
  1198. static int mpu_timer_event(int dev, unsigned char *event)
  1199. {
  1200. unsigned char command = event[1];
  1201. unsigned long parm = *(unsigned int *) &event[4];
  1202. int midi_dev = sound_timer_devs[dev]->devlink;
  1203. switch (command)
  1204. {
  1205. case TMR_WAIT_REL:
  1206. parm += prev_event_time;
  1207. case TMR_WAIT_ABS:
  1208. if (parm > 0)
  1209. {
  1210. long time;
  1211. if (parm <= curr_ticks) /* It's the time */
  1212. return TIMER_NOT_ARMED;
  1213. time = parm;
  1214. next_event_time = prev_event_time = time;
  1215. return TIMER_ARMED;
  1216. }
  1217. break;
  1218. case TMR_START:
  1219. if (tmr_running)
  1220. break;
  1221. return mpu_start_timer(midi_dev);
  1222. case TMR_STOP:
  1223. mpu_cmd(midi_dev, 0x01, 0); /* Send MIDI stop */
  1224. stop_metronome(midi_dev);
  1225. tmr_running = 0;
  1226. break;
  1227. case TMR_CONTINUE:
  1228. if (tmr_running)
  1229. break;
  1230. mpu_cmd(midi_dev, 0x03, 0); /* Send MIDI continue */
  1231. setup_metronome(midi_dev);
  1232. tmr_running = 1;
  1233. break;
  1234. case TMR_TEMPO:
  1235. if (parm)
  1236. {
  1237. if (parm < 8)
  1238. parm = 8;
  1239.   if (parm > 250)
  1240. parm = 250;
  1241. if (mpu_cmd(midi_dev, 0xE0, parm) < 0)
  1242. printk(KERN_WARNING "mpu401: Can't set tempo to %dn", (int) parm);
  1243. curr_tempo = parm;
  1244. }
  1245. break;
  1246. case TMR_ECHO:
  1247. seq_copy_to_input(event, 8);
  1248. break;
  1249. case TMR_TIMESIG:
  1250. if (metronome_mode) /* Metronome enabled */
  1251. {
  1252. metronome_mode = parm;
  1253. setup_metronome(midi_dev);
  1254. }
  1255. break;
  1256. default:;
  1257. }
  1258. return TIMER_NOT_ARMED;
  1259. }
  1260. static unsigned long mpu_timer_get_time(int dev)
  1261. {
  1262. if (!timer_open)
  1263. return 0;
  1264. return curr_ticks;
  1265. }
  1266. static int mpu_timer_ioctl(int dev, unsigned int command, caddr_t arg)
  1267. {
  1268. int midi_dev = sound_timer_devs[dev]->devlink;
  1269. switch (command)
  1270. {
  1271. case SNDCTL_TMR_SOURCE:
  1272. {
  1273. int parm;
  1274. parm = *(int *) arg;
  1275. parm &= timer_caps;
  1276. if (parm != 0)
  1277. {
  1278. timer_mode = parm;
  1279. if (timer_mode & TMR_MODE_CLS)
  1280. mpu_cmd(midi_dev, 0x3c, 0); /* Use CLS sync */
  1281. else if (timer_mode & TMR_MODE_SMPTE)
  1282. mpu_cmd(midi_dev, 0x3d, 0); /* Use SMPTE sync */
  1283. }
  1284. return (*(int *) arg = timer_mode);
  1285. }
  1286. break;
  1287. case SNDCTL_TMR_START:
  1288. mpu_start_timer(midi_dev);
  1289. return 0;
  1290. case SNDCTL_TMR_STOP:
  1291. tmr_running = 0;
  1292. mpu_cmd(midi_dev, 0x01, 0); /* Send MIDI stop */
  1293. stop_metronome(midi_dev);
  1294. return 0;
  1295. case SNDCTL_TMR_CONTINUE:
  1296. if (tmr_running)
  1297. return 0;
  1298. tmr_running = 1;
  1299. mpu_cmd(midi_dev, 0x03, 0); /* Send MIDI continue */
  1300. return 0;
  1301. case SNDCTL_TMR_TIMEBASE:
  1302. {
  1303. int val;
  1304. val = *(int *) arg;
  1305. if (val)
  1306. set_timebase(midi_dev, val);
  1307. return (*(int *) arg = curr_timebase);
  1308. }
  1309. break;
  1310. case SNDCTL_TMR_TEMPO:
  1311. {
  1312. int val;
  1313. int ret;
  1314. val = *(int *) arg;
  1315. if (val)
  1316. {
  1317. if (val < 8)
  1318. val = 8;
  1319. if (val > 250)
  1320. val = 250;
  1321. if ((ret = mpu_cmd(midi_dev, 0xE0, val)) < 0)
  1322. {
  1323. printk(KERN_WARNING "mpu401: Can't set tempo to %dn", (int) val);
  1324. return ret;
  1325. }
  1326. curr_tempo = val;
  1327. }
  1328. return (*(int *) arg = curr_tempo);
  1329. }
  1330. break;
  1331. case SNDCTL_SEQ_CTRLRATE:
  1332. {
  1333. int val;
  1334. val = *(int *) arg;
  1335. if (val != 0) /* Can't change */
  1336. return -EINVAL;
  1337. return (*(int *) arg = ((curr_tempo * curr_timebase) + 30) / 60);
  1338. }
  1339. break;
  1340. case SNDCTL_SEQ_GETTIME:
  1341. return (*(int *) arg = curr_ticks);
  1342. case SNDCTL_TMR_METRONOME:
  1343. metronome_mode = *(int *) arg;
  1344. setup_metronome(midi_dev);
  1345. return 0;
  1346. default:;
  1347. }
  1348. return -EINVAL;
  1349. }
  1350. static void mpu_timer_arm(int dev, long time)
  1351. {
  1352. if (time < 0)
  1353. time = curr_ticks + 1;
  1354. else if (time <= curr_ticks) /* It's the time */
  1355. return;
  1356. next_event_time = prev_event_time = time;
  1357. return;
  1358. }
  1359. static struct sound_timer_operations mpu_timer =
  1360. {
  1361. owner: THIS_MODULE,
  1362. info: {"MPU-401 Timer", 0},
  1363. priority: 10, /* Priority */
  1364. devlink: 0, /* Local device link */
  1365. open: mpu_timer_open,
  1366. close: mpu_timer_close,
  1367. event: mpu_timer_event,
  1368. get_time: mpu_timer_get_time,
  1369. ioctl: mpu_timer_ioctl,
  1370. arm_timer: mpu_timer_arm
  1371. };
  1372. static void mpu_timer_interrupt(void)
  1373. {
  1374. if (!timer_open)
  1375. return;
  1376. if (!tmr_running)
  1377. return;
  1378. curr_clocks++;
  1379. curr_ticks = clocks2ticks(curr_clocks);
  1380. if (curr_ticks >= next_event_time)
  1381. {
  1382. next_event_time = (unsigned long) -1;
  1383. sequencer_timer(0);
  1384. }
  1385. }
  1386. static void timer_ext_event(struct mpu_config *devc, int event, int parm)
  1387. {
  1388. int midi_dev = devc->devno;
  1389. if (!devc->timer_flag)
  1390. return;
  1391. switch (event)
  1392. {
  1393. case TMR_CLOCK:
  1394. printk("<MIDI clk>");
  1395. break;
  1396. case TMR_START:
  1397. printk("Ext MIDI startn");
  1398. if (!tmr_running)
  1399. {
  1400. if (timer_mode & TMR_EXTERNAL)
  1401. {
  1402. tmr_running = 1;
  1403. setup_metronome(midi_dev);
  1404. next_event_time = 0;
  1405. STORE(SEQ_START_TIMER());
  1406. }
  1407. }
  1408. break;
  1409. case TMR_STOP:
  1410. printk("Ext MIDI stopn");
  1411. if (timer_mode & TMR_EXTERNAL)
  1412. {
  1413. tmr_running = 0;
  1414. stop_metronome(midi_dev);
  1415. STORE(SEQ_STOP_TIMER());
  1416. }
  1417. break;
  1418. case TMR_CONTINUE:
  1419. printk("Ext MIDI continuen");
  1420. if (timer_mode & TMR_EXTERNAL)
  1421. {
  1422. tmr_running = 1;
  1423. setup_metronome(midi_dev);
  1424. STORE(SEQ_CONTINUE_TIMER());
  1425.    }
  1426.    break;
  1427. case TMR_SPP:
  1428. printk("Songpos: %dn", parm);
  1429. if (timer_mode & TMR_EXTERNAL)
  1430. {
  1431. STORE(SEQ_SONGPOS(parm));
  1432. }
  1433. break;
  1434. }
  1435. }
  1436. static int mpu_timer_init(int midi_dev)
  1437. {
  1438. struct mpu_config *devc;
  1439. int n;
  1440. devc = &dev_conf[midi_dev];
  1441. if (timer_initialized)
  1442. return -1; /* There is already a similar timer */
  1443. timer_initialized = 1;
  1444. mpu_timer.devlink = midi_dev;
  1445. dev_conf[midi_dev].timer_flag = 1;
  1446. n = sound_alloc_timerdev();
  1447. if (n == -1)
  1448. n = 0;
  1449. sound_timer_devs[n] = &mpu_timer;
  1450. if (devc->version < 0x20) /* Original MPU-401 */
  1451. timer_caps = TMR_INTERNAL | TMR_EXTERNAL | TMR_MODE_FSK | TMR_MODE_MIDI;
  1452. else
  1453. {
  1454. /*
  1455.  * The version number 2.0 is used (at least) by the
  1456.  * MusicQuest cards and the Roland Super-MPU.
  1457.  *
  1458.  * MusicQuest has given a special meaning to the bits of the
  1459.  * revision number. The Super-MPU returns 0.
  1460.  */
  1461. if (devc->revision)
  1462. timer_caps |= TMR_EXTERNAL | TMR_MODE_MIDI;
  1463. if (devc->revision & 0x02)
  1464. timer_caps |= TMR_MODE_CLS;
  1465. if (devc->revision & 0x40)
  1466. max_timebase = 10; /* Has the 216 and 240 ppqn modes */
  1467. }
  1468. timer_mode = (TMR_INTERNAL | TMR_MODE_MIDI) & timer_caps;
  1469. return n;
  1470. }
  1471. EXPORT_SYMBOL(probe_mpu401);
  1472. EXPORT_SYMBOL(attach_mpu401);
  1473. EXPORT_SYMBOL(unload_mpu401);
  1474. EXPORT_SYMBOL(intchk_mpu401);
  1475. EXPORT_SYMBOL(mpuintr);
  1476. static struct address_info cfg;
  1477. static int __initdata io = -1;
  1478. static int __initdata irq = -1;
  1479. MODULE_PARM(irq, "i");
  1480. MODULE_PARM(io, "i");
  1481. int __init init_mpu401(void)
  1482. {
  1483. int ret;
  1484. /* Can be loaded either for module use or to provide functions
  1485.    to others */
  1486. if (io != -1 && irq != -1) {
  1487.         cfg.irq = irq;
  1488. cfg.io_base = io;
  1489. if (probe_mpu401(&cfg) == 0)
  1490. return -ENODEV;
  1491. if ((ret = attach_mpu401(&cfg, THIS_MODULE)))
  1492. return ret;
  1493. }
  1494. return 0;
  1495. }
  1496. void __exit cleanup_mpu401(void)
  1497. {
  1498. if (io != -1 && irq != -1) {
  1499. /* Check for use by, for example, sscape driver */
  1500. unload_mpu401(&cfg);
  1501. }
  1502. }
  1503. module_init(init_mpu401);
  1504. module_exit(cleanup_mpu401);
  1505. #ifndef MODULE
  1506. static int __init setup_mpu401(char *str)
  1507. {
  1508.         /* io, irq */
  1509. int ints[3];
  1510. str = get_options(str, ARRAY_SIZE(ints), ints);
  1511. io = ints[1];
  1512. irq = ints[2];
  1513. return 1;
  1514. }
  1515. __setup("mpu401=", setup_mpu401);
  1516. #endif
  1517. MODULE_LICENSE("GPL");