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

嵌入式Linux

开发平台:

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