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