xref: /linux/sound/isa/wavefront/wavefront_synth.c (revision e58e871becec2d3b04ed91c0c16fe8deac9c9dfa)
1 /* Copyright (C) by Paul Barton-Davis 1998-1999
2  *
3  * Some portions of this file are taken from work that is
4  * copyright (C) by Hannu Savolainen 1993-1996
5  *
6  * This program is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
7  * Version 2 (June 1991). See the "COPYING" file distributed with this software
8  * for more info.
9  */
10 
11 /*
12  * An ALSA lowlevel driver for Turtle Beach ICS2115 wavetable synth
13  *                                             (Maui, Tropez, Tropez Plus)
14  *
15  * This driver supports the onboard wavetable synthesizer (an ICS2115),
16  * including patch, sample and program loading and unloading, conversion
17  * of GUS patches during loading, and full user-level access to all
18  * WaveFront commands. It tries to provide semi-intelligent patch and
19  * sample management as well.
20  *
21  */
22 
23 #include <linux/io.h>
24 #include <linux/interrupt.h>
25 #include <linux/init.h>
26 #include <linux/delay.h>
27 #include <linux/time.h>
28 #include <linux/wait.h>
29 #include <linux/sched/signal.h>
30 #include <linux/firmware.h>
31 #include <linux/moduleparam.h>
32 #include <linux/slab.h>
33 #include <linux/module.h>
34 #include <sound/core.h>
35 #include <sound/snd_wavefront.h>
36 #include <sound/initval.h>
37 
38 static int wf_raw = 0; /* we normally check for "raw state" to firmware
39 			  loading. if non-zero, then during driver loading, the
40 			  state of the board is ignored, and we reset the
41 			  board and load the firmware anyway.
42 		       */
43 
44 static int fx_raw = 1; /* if this is zero, we'll leave the FX processor in
45 			  whatever state it is when the driver is loaded.
46 			  The default is to download the microprogram and
47 			  associated coefficients to set it up for "default"
48 			  operation, whatever that means.
49 		       */
50 
51 static int debug_default = 0;  /* you can set this to control debugging
52 				  during driver loading. it takes any combination
53 				  of the WF_DEBUG_* flags defined in
54 				  wavefront.h
55 			       */
56 
57 /* XXX this needs to be made firmware and hardware version dependent */
58 
59 #define DEFAULT_OSPATH	"wavefront.os"
60 static char *ospath = DEFAULT_OSPATH; /* the firmware file name */
61 
62 static int wait_usecs = 150; /* This magic number seems to give pretty optimal
63 				throughput based on my limited experimentation.
64 				If you want to play around with it and find a better
65 				value, be my guest. Remember, the idea is to
66 				get a number that causes us to just busy wait
67 				for as many WaveFront commands as possible, without
68 				coming up with a number so large that we hog the
69 				whole CPU.
70 
71 				Specifically, with this number, out of about 134,000
72 				status waits, only about 250 result in a sleep.
73 			    */
74 
75 static int sleep_interval = 100;   /* HZ/sleep_interval seconds per sleep */
76 static int sleep_tries = 50;       /* number of times we'll try to sleep */
77 
78 static int reset_time = 2;        /* hundreths of a second we wait after a HW
79 				     reset for the expected interrupt.
80 				  */
81 
82 static int ramcheck_time = 20;    /* time in seconds to wait while ROM code
83 				     checks on-board RAM.
84 				  */
85 
86 static int osrun_time = 10;       /* time in seconds we wait for the OS to
87 				     start running.
88 				  */
89 module_param(wf_raw, int, 0444);
90 MODULE_PARM_DESC(wf_raw, "if non-zero, assume that we need to boot the OS");
91 module_param(fx_raw, int, 0444);
92 MODULE_PARM_DESC(fx_raw, "if non-zero, assume that the FX process needs help");
93 module_param(debug_default, int, 0444);
94 MODULE_PARM_DESC(debug_default, "debug parameters for card initialization");
95 module_param(wait_usecs, int, 0444);
96 MODULE_PARM_DESC(wait_usecs, "how long to wait without sleeping, usecs");
97 module_param(sleep_interval, int, 0444);
98 MODULE_PARM_DESC(sleep_interval, "how long to sleep when waiting for reply");
99 module_param(sleep_tries, int, 0444);
100 MODULE_PARM_DESC(sleep_tries, "how many times to try sleeping during a wait");
101 module_param(ospath, charp, 0444);
102 MODULE_PARM_DESC(ospath, "pathname to processed ICS2115 OS firmware");
103 module_param(reset_time, int, 0444);
104 MODULE_PARM_DESC(reset_time, "how long to wait for a reset to take effect");
105 module_param(ramcheck_time, int, 0444);
106 MODULE_PARM_DESC(ramcheck_time, "how many seconds to wait for the RAM test");
107 module_param(osrun_time, int, 0444);
108 MODULE_PARM_DESC(osrun_time, "how many seconds to wait for the ICS2115 OS");
109 
110 /* if WF_DEBUG not defined, no run-time debugging messages will
111    be available via the debug flag setting. Given the current
112    beta state of the driver, this will remain set until a future
113    version.
114 */
115 
116 #define WF_DEBUG 1
117 
118 #ifdef WF_DEBUG
119 
120 #define DPRINT(cond, ...) \
121        if ((dev->debug & (cond)) == (cond)) { \
122 	     snd_printk (__VA_ARGS__); \
123        }
124 #else
125 #define DPRINT(cond, args...)
126 #endif /* WF_DEBUG */
127 
128 #define LOGNAME "WaveFront: "
129 
130 /* bitmasks for WaveFront status port value */
131 
132 #define STAT_RINTR_ENABLED	0x01
133 #define STAT_CAN_READ		0x02
134 #define STAT_INTR_READ		0x04
135 #define STAT_WINTR_ENABLED	0x10
136 #define STAT_CAN_WRITE		0x20
137 #define STAT_INTR_WRITE		0x40
138 
139 static int wavefront_delete_sample (snd_wavefront_t *, int sampnum);
140 static int wavefront_find_free_sample (snd_wavefront_t *);
141 
142 struct wavefront_command {
143 	int cmd;
144 	char *action;
145 	unsigned int read_cnt;
146 	unsigned int write_cnt;
147 	int need_ack;
148 };
149 
150 static struct {
151 	int errno;
152 	const char *errstr;
153 } wavefront_errors[] = {
154 	{ 0x01, "Bad sample number" },
155 	{ 0x02, "Out of sample memory" },
156 	{ 0x03, "Bad patch number" },
157 	{ 0x04, "Error in number of voices" },
158 	{ 0x06, "Sample load already in progress" },
159 	{ 0x0B, "No sample load request pending" },
160 	{ 0x0E, "Bad MIDI channel number" },
161 	{ 0x10, "Download Record Error" },
162 	{ 0x80, "Success" },
163 	{ 0x0 }
164 };
165 
166 #define NEEDS_ACK 1
167 
168 static struct wavefront_command wavefront_commands[] = {
169 	{ WFC_SET_SYNTHVOL, "set synthesizer volume", 0, 1, NEEDS_ACK },
170 	{ WFC_GET_SYNTHVOL, "get synthesizer volume", 1, 0, 0},
171 	{ WFC_SET_NVOICES, "set number of voices", 0, 1, NEEDS_ACK },
172 	{ WFC_GET_NVOICES, "get number of voices", 1, 0, 0 },
173 	{ WFC_SET_TUNING, "set synthesizer tuning", 0, 2, NEEDS_ACK },
174 	{ WFC_GET_TUNING, "get synthesizer tuning", 2, 0, 0 },
175 	{ WFC_DISABLE_CHANNEL, "disable synth channel", 0, 1, NEEDS_ACK },
176 	{ WFC_ENABLE_CHANNEL, "enable synth channel", 0, 1, NEEDS_ACK },
177 	{ WFC_GET_CHANNEL_STATUS, "get synth channel status", 3, 0, 0 },
178 	{ WFC_MISYNTH_OFF, "disable midi-in to synth", 0, 0, NEEDS_ACK },
179 	{ WFC_MISYNTH_ON, "enable midi-in to synth", 0, 0, NEEDS_ACK },
180 	{ WFC_VMIDI_ON, "enable virtual midi mode", 0, 0, NEEDS_ACK },
181 	{ WFC_VMIDI_OFF, "disable virtual midi mode", 0, 0, NEEDS_ACK },
182 	{ WFC_MIDI_STATUS, "report midi status", 1, 0, 0 },
183 	{ WFC_FIRMWARE_VERSION, "report firmware version", 2, 0, 0 },
184 	{ WFC_HARDWARE_VERSION, "report hardware version", 2, 0, 0 },
185 	{ WFC_GET_NSAMPLES, "report number of samples", 2, 0, 0 },
186 	{ WFC_INSTOUT_LEVELS, "report instantaneous output levels", 7, 0, 0 },
187 	{ WFC_PEAKOUT_LEVELS, "report peak output levels", 7, 0, 0 },
188 	{ WFC_DOWNLOAD_SAMPLE, "download sample",
189 	  0, WF_SAMPLE_BYTES, NEEDS_ACK },
190 	{ WFC_DOWNLOAD_BLOCK, "download block", 0, 0, NEEDS_ACK},
191 	{ WFC_DOWNLOAD_SAMPLE_HEADER, "download sample header",
192 	  0, WF_SAMPLE_HDR_BYTES, NEEDS_ACK },
193 	{ WFC_UPLOAD_SAMPLE_HEADER, "upload sample header", 13, 2, 0 },
194 
195 	/* This command requires a variable number of bytes to be written.
196 	   There is a hack in snd_wavefront_cmd() to support this. The actual
197 	   count is passed in as the read buffer ptr, cast appropriately.
198 	   Ugh.
199 	*/
200 
201 	{ WFC_DOWNLOAD_MULTISAMPLE, "download multisample", 0, 0, NEEDS_ACK },
202 
203 	/* This one is a hack as well. We just read the first byte of the
204 	   response, don't fetch an ACK, and leave the rest to the
205 	   calling function. Ugly, ugly, ugly.
206 	*/
207 
208 	{ WFC_UPLOAD_MULTISAMPLE, "upload multisample", 2, 1, 0 },
209 	{ WFC_DOWNLOAD_SAMPLE_ALIAS, "download sample alias",
210 	  0, WF_ALIAS_BYTES, NEEDS_ACK },
211 	{ WFC_UPLOAD_SAMPLE_ALIAS, "upload sample alias", WF_ALIAS_BYTES, 2, 0},
212 	{ WFC_DELETE_SAMPLE, "delete sample", 0, 2, NEEDS_ACK },
213 	{ WFC_IDENTIFY_SAMPLE_TYPE, "identify sample type", 5, 2, 0 },
214 	{ WFC_UPLOAD_SAMPLE_PARAMS, "upload sample parameters" },
215 	{ WFC_REPORT_FREE_MEMORY, "report free memory", 4, 0, 0 },
216 	{ WFC_DOWNLOAD_PATCH, "download patch", 0, 134, NEEDS_ACK },
217 	{ WFC_UPLOAD_PATCH, "upload patch", 132, 2, 0 },
218 	{ WFC_DOWNLOAD_PROGRAM, "download program", 0, 33, NEEDS_ACK },
219 	{ WFC_UPLOAD_PROGRAM, "upload program", 32, 1, 0 },
220 	{ WFC_DOWNLOAD_EDRUM_PROGRAM, "download enhanced drum program", 0, 9,
221 	  NEEDS_ACK},
222 	{ WFC_UPLOAD_EDRUM_PROGRAM, "upload enhanced drum program", 8, 1, 0},
223 	{ WFC_SET_EDRUM_CHANNEL, "set enhanced drum program channel",
224 	  0, 1, NEEDS_ACK },
225 	{ WFC_DISABLE_DRUM_PROGRAM, "disable drum program", 0, 1, NEEDS_ACK },
226 	{ WFC_REPORT_CHANNEL_PROGRAMS, "report channel program numbers",
227 	  32, 0, 0 },
228 	{ WFC_NOOP, "the no-op command", 0, 0, NEEDS_ACK },
229 	{ 0x00 }
230 };
231 
232 static const char *
233 wavefront_errorstr (int errnum)
234 
235 {
236 	int i;
237 
238 	for (i = 0; wavefront_errors[i].errstr; i++) {
239 		if (wavefront_errors[i].errno == errnum) {
240 			return wavefront_errors[i].errstr;
241 		}
242 	}
243 
244 	return "Unknown WaveFront error";
245 }
246 
247 static struct wavefront_command *
248 wavefront_get_command (int cmd)
249 
250 {
251 	int i;
252 
253 	for (i = 0; wavefront_commands[i].cmd != 0; i++) {
254 		if (cmd == wavefront_commands[i].cmd) {
255 			return &wavefront_commands[i];
256 		}
257 	}
258 
259 	return NULL;
260 }
261 
262 static inline int
263 wavefront_status (snd_wavefront_t *dev)
264 
265 {
266 	return inb (dev->status_port);
267 }
268 
269 static int
270 wavefront_sleep (int limit)
271 
272 {
273 	schedule_timeout_interruptible(limit);
274 
275 	return signal_pending(current);
276 }
277 
278 static int
279 wavefront_wait (snd_wavefront_t *dev, int mask)
280 
281 {
282 	int             i;
283 
284 	/* Spin for a short period of time, because >99% of all
285 	   requests to the WaveFront can be serviced inline like this.
286 	*/
287 
288 	for (i = 0; i < wait_usecs; i += 5) {
289 		if (wavefront_status (dev) & mask) {
290 			return 1;
291 		}
292 		udelay(5);
293 	}
294 
295 	for (i = 0; i < sleep_tries; i++) {
296 
297 		if (wavefront_status (dev) & mask) {
298 			return 1;
299 		}
300 
301 		if (wavefront_sleep (HZ/sleep_interval)) {
302 			return (0);
303 		}
304 	}
305 
306 	return (0);
307 }
308 
309 static int
310 wavefront_read (snd_wavefront_t *dev)
311 
312 {
313 	if (wavefront_wait (dev, STAT_CAN_READ))
314 		return inb (dev->data_port);
315 
316 	DPRINT (WF_DEBUG_DATA, "read timeout.\n");
317 
318 	return -1;
319 }
320 
321 static int
322 wavefront_write (snd_wavefront_t *dev, unsigned char data)
323 
324 {
325 	if (wavefront_wait (dev, STAT_CAN_WRITE)) {
326 		outb (data, dev->data_port);
327 		return 0;
328 	}
329 
330 	DPRINT (WF_DEBUG_DATA, "write timeout.\n");
331 
332 	return -1;
333 }
334 
335 int
336 snd_wavefront_cmd (snd_wavefront_t *dev,
337 		   int cmd, unsigned char *rbuf, unsigned char *wbuf)
338 
339 {
340 	int ack;
341 	unsigned int i;
342 	int c;
343 	struct wavefront_command *wfcmd;
344 
345 	if ((wfcmd = wavefront_get_command (cmd)) == NULL) {
346 		snd_printk ("command 0x%x not supported.\n",
347 			cmd);
348 		return 1;
349 	}
350 
351 	/* Hack to handle the one variable-size write command. See
352 	   wavefront_send_multisample() for the other half of this
353 	   gross and ugly strategy.
354 	*/
355 
356 	if (cmd == WFC_DOWNLOAD_MULTISAMPLE) {
357 		wfcmd->write_cnt = (unsigned long) rbuf;
358 		rbuf = NULL;
359 	}
360 
361 	DPRINT (WF_DEBUG_CMD, "0x%x [%s] (%d,%d,%d)\n",
362 			       cmd, wfcmd->action, wfcmd->read_cnt,
363 			       wfcmd->write_cnt, wfcmd->need_ack);
364 
365 	if (wavefront_write (dev, cmd)) {
366 		DPRINT ((WF_DEBUG_IO|WF_DEBUG_CMD), "cannot request "
367 						     "0x%x [%s].\n",
368 						     cmd, wfcmd->action);
369 		return 1;
370 	}
371 
372 	if (wfcmd->write_cnt > 0) {
373 		DPRINT (WF_DEBUG_DATA, "writing %d bytes "
374 					"for 0x%x\n",
375 					wfcmd->write_cnt, cmd);
376 
377 		for (i = 0; i < wfcmd->write_cnt; i++) {
378 			if (wavefront_write (dev, wbuf[i])) {
379 				DPRINT (WF_DEBUG_IO, "bad write for byte "
380 						      "%d of 0x%x [%s].\n",
381 						      i, cmd, wfcmd->action);
382 				return 1;
383 			}
384 
385 			DPRINT (WF_DEBUG_DATA, "write[%d] = 0x%x\n",
386 						i, wbuf[i]);
387 		}
388 	}
389 
390 	if (wfcmd->read_cnt > 0) {
391 		DPRINT (WF_DEBUG_DATA, "reading %d ints "
392 					"for 0x%x\n",
393 					wfcmd->read_cnt, cmd);
394 
395 		for (i = 0; i < wfcmd->read_cnt; i++) {
396 
397 			if ((c = wavefront_read (dev)) == -1) {
398 				DPRINT (WF_DEBUG_IO, "bad read for byte "
399 						      "%d of 0x%x [%s].\n",
400 						      i, cmd, wfcmd->action);
401 				return 1;
402 			}
403 
404 			/* Now handle errors. Lots of special cases here */
405 
406 			if (c == 0xff) {
407 				if ((c = wavefront_read (dev)) == -1) {
408 					DPRINT (WF_DEBUG_IO, "bad read for "
409 							      "error byte at "
410 							      "read byte %d "
411 							      "of 0x%x [%s].\n",
412 							      i, cmd,
413 							      wfcmd->action);
414 					return 1;
415 				}
416 
417 				/* Can you believe this madness ? */
418 
419 				if (c == 1 &&
420 				    wfcmd->cmd == WFC_IDENTIFY_SAMPLE_TYPE) {
421 					rbuf[0] = WF_ST_EMPTY;
422 					return (0);
423 
424 				} else if (c == 3 &&
425 					   wfcmd->cmd == WFC_UPLOAD_PATCH) {
426 
427 					return 3;
428 
429 				} else if (c == 1 &&
430 					   wfcmd->cmd == WFC_UPLOAD_PROGRAM) {
431 
432 					return 1;
433 
434 				} else {
435 
436 					DPRINT (WF_DEBUG_IO, "error %d (%s) "
437 							      "during "
438 							      "read for byte "
439 							      "%d of 0x%x "
440 							      "[%s].\n",
441 							      c,
442 							      wavefront_errorstr (c),
443 							      i, cmd,
444 							      wfcmd->action);
445 					return 1;
446 
447 				}
448 
449 		} else {
450 				rbuf[i] = c;
451 			}
452 
453 			DPRINT (WF_DEBUG_DATA, "read[%d] = 0x%x\n",i, rbuf[i]);
454 		}
455 	}
456 
457 	if ((wfcmd->read_cnt == 0 && wfcmd->write_cnt == 0) || wfcmd->need_ack) {
458 
459 		DPRINT (WF_DEBUG_CMD, "reading ACK for 0x%x\n", cmd);
460 
461 		/* Some commands need an ACK, but return zero instead
462 		   of the standard value.
463 		*/
464 
465 		if ((ack = wavefront_read (dev)) == 0) {
466 			ack = WF_ACK;
467 		}
468 
469 		if (ack != WF_ACK) {
470 			if (ack == -1) {
471 				DPRINT (WF_DEBUG_IO, "cannot read ack for "
472 						      "0x%x [%s].\n",
473 						      cmd, wfcmd->action);
474 				return 1;
475 
476 			} else {
477 				int err = -1; /* something unknown */
478 
479 				if (ack == 0xff) { /* explicit error */
480 
481 					if ((err = wavefront_read (dev)) == -1) {
482 						DPRINT (WF_DEBUG_DATA,
483 							"cannot read err "
484 							"for 0x%x [%s].\n",
485 							cmd, wfcmd->action);
486 					}
487 				}
488 
489 				DPRINT (WF_DEBUG_IO, "0x%x [%s] "
490 					"failed (0x%x, 0x%x, %s)\n",
491 					cmd, wfcmd->action, ack, err,
492 					wavefront_errorstr (err));
493 
494 				return -err;
495 			}
496 		}
497 
498 		DPRINT (WF_DEBUG_DATA, "ack received "
499 					"for 0x%x [%s]\n",
500 					cmd, wfcmd->action);
501 	} else {
502 
503 		DPRINT (WF_DEBUG_CMD, "0x%x [%s] does not need "
504 				       "ACK (%d,%d,%d)\n",
505 				       cmd, wfcmd->action, wfcmd->read_cnt,
506 				       wfcmd->write_cnt, wfcmd->need_ack);
507 	}
508 
509 	return 0;
510 
511 }
512 
513 /***********************************************************************
514 WaveFront data munging
515 
516 Things here are weird. All data written to the board cannot
517 have its most significant bit set. Any data item with values
518 potentially > 0x7F (127) must be split across multiple bytes.
519 
520 Sometimes, we need to munge numeric values that are represented on
521 the x86 side as 8-32 bit values. Sometimes, we need to munge data
522 that is represented on the x86 side as an array of bytes. The most
523 efficient approach to handling both cases seems to be to use 2
524 different functions for munging and 2 for de-munging. This avoids
525 weird casting and worrying about bit-level offsets.
526 
527 **********************************************************************/
528 
529 static unsigned char *
530 munge_int32 (unsigned int src,
531 	     unsigned char *dst,
532 	     unsigned int dst_size)
533 {
534 	unsigned int i;
535 
536 	for (i = 0; i < dst_size; i++) {
537 		*dst = src & 0x7F;  /* Mask high bit of LSB */
538 		src = src >> 7;     /* Rotate Right 7 bits  */
539 	                            /* Note: we leave the upper bits in place */
540 
541 		dst++;
542 	}
543 	return dst;
544 };
545 
546 static int
547 demunge_int32 (unsigned char* src, int src_size)
548 
549 {
550 	int i;
551  	int outval = 0;
552 
553  	for (i = src_size - 1; i >= 0; i--) {
554 		outval=(outval<<7)+src[i];
555 	}
556 
557 	return outval;
558 };
559 
560 static
561 unsigned char *
562 munge_buf (unsigned char *src, unsigned char *dst, unsigned int dst_size)
563 
564 {
565 	unsigned int i;
566 	unsigned int last = dst_size / 2;
567 
568 	for (i = 0; i < last; i++) {
569 		*dst++ = src[i] & 0x7f;
570 		*dst++ = src[i] >> 7;
571 	}
572 	return dst;
573 }
574 
575 static
576 unsigned char *
577 demunge_buf (unsigned char *src, unsigned char *dst, unsigned int src_bytes)
578 
579 {
580 	int i;
581 	unsigned char *end = src + src_bytes;
582 
583 	end = src + src_bytes;
584 
585 	/* NOTE: src and dst *CAN* point to the same address */
586 
587 	for (i = 0; src != end; i++) {
588 		dst[i] = *src++;
589 		dst[i] |= (*src++)<<7;
590 	}
591 
592 	return dst;
593 }
594 
595 /***********************************************************************
596 WaveFront: sample, patch and program management.
597 ***********************************************************************/
598 
599 static int
600 wavefront_delete_sample (snd_wavefront_t *dev, int sample_num)
601 
602 {
603 	unsigned char wbuf[2];
604 	int x;
605 
606 	wbuf[0] = sample_num & 0x7f;
607 	wbuf[1] = sample_num >> 7;
608 
609 	if ((x = snd_wavefront_cmd (dev, WFC_DELETE_SAMPLE, NULL, wbuf)) == 0) {
610 		dev->sample_status[sample_num] = WF_ST_EMPTY;
611 	}
612 
613 	return x;
614 }
615 
616 static int
617 wavefront_get_sample_status (snd_wavefront_t *dev, int assume_rom)
618 
619 {
620 	int i;
621 	unsigned char rbuf[32], wbuf[32];
622 	unsigned int    sc_real, sc_alias, sc_multi;
623 
624 	/* check sample status */
625 
626 	if (snd_wavefront_cmd (dev, WFC_GET_NSAMPLES, rbuf, wbuf)) {
627 		snd_printk ("cannot request sample count.\n");
628 		return -1;
629 	}
630 
631 	sc_real = sc_alias = sc_multi = dev->samples_used = 0;
632 
633 	for (i = 0; i < WF_MAX_SAMPLE; i++) {
634 
635 		wbuf[0] = i & 0x7f;
636 		wbuf[1] = i >> 7;
637 
638 		if (snd_wavefront_cmd (dev, WFC_IDENTIFY_SAMPLE_TYPE, rbuf, wbuf)) {
639 			snd_printk(KERN_WARNING "cannot identify sample "
640 				   "type of slot %d\n", i);
641 			dev->sample_status[i] = WF_ST_EMPTY;
642 			continue;
643 		}
644 
645 		dev->sample_status[i] = (WF_SLOT_FILLED|rbuf[0]);
646 
647 		if (assume_rom) {
648 			dev->sample_status[i] |= WF_SLOT_ROM;
649 		}
650 
651 		switch (rbuf[0] & WF_ST_MASK) {
652 		case WF_ST_SAMPLE:
653 			sc_real++;
654 			break;
655 		case WF_ST_MULTISAMPLE:
656 			sc_multi++;
657 			break;
658 		case WF_ST_ALIAS:
659 			sc_alias++;
660 			break;
661 		case WF_ST_EMPTY:
662 			break;
663 
664 		default:
665 			snd_printk ("unknown sample type for "
666 				    "slot %d (0x%x)\n",
667 				    i, rbuf[0]);
668 		}
669 
670 		if (rbuf[0] != WF_ST_EMPTY) {
671 			dev->samples_used++;
672 		}
673 	}
674 
675 	snd_printk ("%d samples used (%d real, %d aliases, %d multi), "
676 		    "%d empty\n", dev->samples_used, sc_real, sc_alias, sc_multi,
677 		    WF_MAX_SAMPLE - dev->samples_used);
678 
679 
680 	return (0);
681 
682 }
683 
684 static int
685 wavefront_get_patch_status (snd_wavefront_t *dev)
686 
687 {
688 	unsigned char patchbuf[WF_PATCH_BYTES];
689 	unsigned char patchnum[2];
690 	wavefront_patch *p;
691 	int i, x, cnt, cnt2;
692 
693 	for (i = 0; i < WF_MAX_PATCH; i++) {
694 		patchnum[0] = i & 0x7f;
695 		patchnum[1] = i >> 7;
696 
697 		if ((x = snd_wavefront_cmd (dev, WFC_UPLOAD_PATCH, patchbuf,
698 					patchnum)) == 0) {
699 
700 			dev->patch_status[i] |= WF_SLOT_FILLED;
701 			p = (wavefront_patch *) patchbuf;
702 			dev->sample_status
703 				[p->sample_number|(p->sample_msb<<7)] |=
704 				WF_SLOT_USED;
705 
706 		} else if (x == 3) { /* Bad patch number */
707 			dev->patch_status[i] = 0;
708 		} else {
709 			snd_printk ("upload patch "
710 				    "error 0x%x\n", x);
711 			dev->patch_status[i] = 0;
712 			return 1;
713 		}
714 	}
715 
716 	/* program status has already filled in slot_used bits */
717 
718 	for (i = 0, cnt = 0, cnt2 = 0; i < WF_MAX_PATCH; i++) {
719 		if (dev->patch_status[i] & WF_SLOT_FILLED) {
720 			cnt++;
721 		}
722 		if (dev->patch_status[i] & WF_SLOT_USED) {
723 			cnt2++;
724 		}
725 
726 	}
727 	snd_printk ("%d patch slots filled, %d in use\n", cnt, cnt2);
728 
729 	return (0);
730 }
731 
732 static int
733 wavefront_get_program_status (snd_wavefront_t *dev)
734 
735 {
736 	unsigned char progbuf[WF_PROGRAM_BYTES];
737 	wavefront_program prog;
738 	unsigned char prognum;
739 	int i, x, l, cnt;
740 
741 	for (i = 0; i < WF_MAX_PROGRAM; i++) {
742 		prognum = i;
743 
744 		if ((x = snd_wavefront_cmd (dev, WFC_UPLOAD_PROGRAM, progbuf,
745 					&prognum)) == 0) {
746 
747 			dev->prog_status[i] |= WF_SLOT_USED;
748 
749 			demunge_buf (progbuf, (unsigned char *) &prog,
750 				     WF_PROGRAM_BYTES);
751 
752 			for (l = 0; l < WF_NUM_LAYERS; l++) {
753 				if (prog.layer[l].mute) {
754 					dev->patch_status
755 						[prog.layer[l].patch_number] |=
756 						WF_SLOT_USED;
757 				}
758 			}
759 		} else if (x == 1) { /* Bad program number */
760 			dev->prog_status[i] = 0;
761 		} else {
762 			snd_printk ("upload program "
763 				    "error 0x%x\n", x);
764 			dev->prog_status[i] = 0;
765 		}
766 	}
767 
768 	for (i = 0, cnt = 0; i < WF_MAX_PROGRAM; i++) {
769 		if (dev->prog_status[i]) {
770 			cnt++;
771 		}
772 	}
773 
774 	snd_printk ("%d programs slots in use\n", cnt);
775 
776 	return (0);
777 }
778 
779 static int
780 wavefront_send_patch (snd_wavefront_t *dev, wavefront_patch_info *header)
781 
782 {
783 	unsigned char buf[WF_PATCH_BYTES+2];
784 	unsigned char *bptr;
785 
786 	DPRINT (WF_DEBUG_LOAD_PATCH, "downloading patch %d\n",
787 				      header->number);
788 
789 	if (header->number >= ARRAY_SIZE(dev->patch_status))
790 		return -EINVAL;
791 
792 	dev->patch_status[header->number] |= WF_SLOT_FILLED;
793 
794 	bptr = buf;
795 	bptr = munge_int32 (header->number, buf, 2);
796 	munge_buf ((unsigned char *)&header->hdr.p, bptr, WF_PATCH_BYTES);
797 
798 	if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_PATCH, NULL, buf)) {
799 		snd_printk ("download patch failed\n");
800 		return -EIO;
801 	}
802 
803 	return (0);
804 }
805 
806 static int
807 wavefront_send_program (snd_wavefront_t *dev, wavefront_patch_info *header)
808 
809 {
810 	unsigned char buf[WF_PROGRAM_BYTES+1];
811 	int i;
812 
813 	DPRINT (WF_DEBUG_LOAD_PATCH, "downloading program %d\n",
814 		header->number);
815 
816 	if (header->number >= ARRAY_SIZE(dev->prog_status))
817 		return -EINVAL;
818 
819 	dev->prog_status[header->number] = WF_SLOT_USED;
820 
821 	/* XXX need to zero existing SLOT_USED bit for program_status[i]
822 	   where `i' is the program that's being (potentially) overwritten.
823 	*/
824 
825 	for (i = 0; i < WF_NUM_LAYERS; i++) {
826 		if (header->hdr.pr.layer[i].mute) {
827 			dev->patch_status[header->hdr.pr.layer[i].patch_number] |=
828 				WF_SLOT_USED;
829 
830 			/* XXX need to mark SLOT_USED for sample used by
831 			   patch_number, but this means we have to load it. Ick.
832 			*/
833 		}
834 	}
835 
836 	buf[0] = header->number;
837 	munge_buf ((unsigned char *)&header->hdr.pr, &buf[1], WF_PROGRAM_BYTES);
838 
839 	if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_PROGRAM, NULL, buf)) {
840 		snd_printk ("download patch failed\n");
841 		return -EIO;
842 	}
843 
844 	return (0);
845 }
846 
847 static int
848 wavefront_freemem (snd_wavefront_t *dev)
849 
850 {
851 	char rbuf[8];
852 
853 	if (snd_wavefront_cmd (dev, WFC_REPORT_FREE_MEMORY, rbuf, NULL)) {
854 		snd_printk ("can't get memory stats.\n");
855 		return -1;
856 	} else {
857 		return demunge_int32 (rbuf, 4);
858 	}
859 }
860 
861 static int
862 wavefront_send_sample (snd_wavefront_t *dev,
863 		       wavefront_patch_info *header,
864 		       u16 __user *dataptr,
865 		       int data_is_unsigned)
866 
867 {
868 	/* samples are downloaded via a 16-bit wide i/o port
869 	   (you could think of it as 2 adjacent 8-bit wide ports
870 	   but its less efficient that way). therefore, all
871 	   the blocksizes and so forth listed in the documentation,
872 	   and used conventionally to refer to sample sizes,
873 	   which are given in 8-bit units (bytes), need to be
874 	   divided by 2.
875         */
876 
877 	u16 sample_short = 0;
878 	u32 length;
879 	u16 __user *data_end = NULL;
880 	unsigned int i;
881 	const unsigned int max_blksize = 4096/2;
882 	unsigned int written;
883 	unsigned int blocksize;
884 	int dma_ack;
885 	int blocknum;
886 	unsigned char sample_hdr[WF_SAMPLE_HDR_BYTES];
887 	unsigned char *shptr;
888 	int skip = 0;
889 	int initial_skip = 0;
890 
891 	DPRINT (WF_DEBUG_LOAD_PATCH, "sample %sdownload for slot %d, "
892 				      "type %d, %d bytes from 0x%lx\n",
893 				      header->size ? "" : "header ",
894 				      header->number, header->subkey,
895 				      header->size,
896 				      (unsigned long) header->dataptr);
897 
898 	if (header->number == WAVEFRONT_FIND_FREE_SAMPLE_SLOT) {
899 		int x;
900 
901 		if ((x = wavefront_find_free_sample (dev)) < 0) {
902 			return -ENOMEM;
903 		}
904 		snd_printk ("unspecified sample => %d\n", x);
905 		header->number = x;
906 	}
907 
908 	if (header->number >= WF_MAX_SAMPLE)
909 		return -EINVAL;
910 
911 	if (header->size) {
912 
913 		/* XXX it's a debatable point whether or not RDONLY semantics
914 		   on the ROM samples should cover just the sample data or
915 		   the sample header. For now, it only covers the sample data,
916 		   so anyone is free at all times to rewrite sample headers.
917 
918 		   My reason for this is that we have the sample headers
919 		   available in the WFB file for General MIDI, and so these
920 		   can always be reset if needed. The sample data, however,
921 		   cannot be recovered without a complete reset and firmware
922 		   reload of the ICS2115, which is a very expensive operation.
923 
924 		   So, doing things this way allows us to honor the notion of
925 		   "RESETSAMPLES" reasonably cheaply. Note however, that this
926 		   is done purely at user level: there is no WFB parser in
927 		   this driver, and so a complete reset (back to General MIDI,
928 		   or theoretically some other configuration) is the
929 		   responsibility of the user level library.
930 
931 		   To try to do this in the kernel would be a little
932 		   crazy: we'd need 158K of kernel space just to hold
933 		   a copy of the patch/program/sample header data.
934 		*/
935 
936 		if (dev->rom_samples_rdonly) {
937 			if (dev->sample_status[header->number] & WF_SLOT_ROM) {
938 				snd_printk ("sample slot %d "
939 					    "write protected\n",
940 					    header->number);
941 				return -EACCES;
942 			}
943 		}
944 
945 		wavefront_delete_sample (dev, header->number);
946 	}
947 
948 	if (header->size) {
949 		dev->freemem = wavefront_freemem (dev);
950 
951 		if (dev->freemem < (int)header->size) {
952 			snd_printk ("insufficient memory to "
953 				    "load %d byte sample.\n",
954 				    header->size);
955 			return -ENOMEM;
956 		}
957 
958 	}
959 
960 	skip = WF_GET_CHANNEL(&header->hdr.s);
961 
962 	if (skip > 0 && header->hdr.s.SampleResolution != LINEAR_16BIT) {
963 		snd_printk ("channel selection only "
964 			    "possible on 16-bit samples");
965 		return -EINVAL;
966 	}
967 
968 	switch (skip) {
969 	case 0:
970 		initial_skip = 0;
971 		skip = 1;
972 		break;
973 	case 1:
974 		initial_skip = 0;
975 		skip = 2;
976 		break;
977 	case 2:
978 		initial_skip = 1;
979 		skip = 2;
980 		break;
981 	case 3:
982 		initial_skip = 2;
983 		skip = 3;
984 		break;
985 	case 4:
986 		initial_skip = 3;
987 		skip = 4;
988 		break;
989 	case 5:
990 		initial_skip = 4;
991 		skip = 5;
992 		break;
993 	case 6:
994 		initial_skip = 5;
995 		skip = 6;
996 		break;
997 	}
998 
999 	DPRINT (WF_DEBUG_LOAD_PATCH, "channel selection: %d => "
1000 				      "initial skip = %d, skip = %d\n",
1001 				      WF_GET_CHANNEL (&header->hdr.s),
1002 				      initial_skip, skip);
1003 
1004 	/* Be safe, and zero the "Unused" bits ... */
1005 
1006 	WF_SET_CHANNEL(&header->hdr.s, 0);
1007 
1008 	/* adjust size for 16 bit samples by dividing by two.  We always
1009 	   send 16 bits per write, even for 8 bit samples, so the length
1010 	   is always half the size of the sample data in bytes.
1011 	*/
1012 
1013 	length = header->size / 2;
1014 
1015 	/* the data we're sent has not been munged, and in fact, the
1016 	   header we have to send isn't just a munged copy either.
1017 	   so, build the sample header right here.
1018 	*/
1019 
1020 	shptr = &sample_hdr[0];
1021 
1022 	shptr = munge_int32 (header->number, shptr, 2);
1023 
1024 	if (header->size) {
1025 		shptr = munge_int32 (length, shptr, 4);
1026 	}
1027 
1028 	/* Yes, a 4 byte result doesn't contain all of the offset bits,
1029 	   but the offset only uses 24 bits.
1030 	*/
1031 
1032 	shptr = munge_int32 (*((u32 *) &header->hdr.s.sampleStartOffset),
1033 			     shptr, 4);
1034 	shptr = munge_int32 (*((u32 *) &header->hdr.s.loopStartOffset),
1035 			     shptr, 4);
1036 	shptr = munge_int32 (*((u32 *) &header->hdr.s.loopEndOffset),
1037 			     shptr, 4);
1038 	shptr = munge_int32 (*((u32 *) &header->hdr.s.sampleEndOffset),
1039 			     shptr, 4);
1040 
1041 	/* This one is truly weird. What kind of weirdo decided that in
1042 	   a system dominated by 16 and 32 bit integers, they would use
1043 	   a just 12 bits ?
1044 	*/
1045 
1046 	shptr = munge_int32 (header->hdr.s.FrequencyBias, shptr, 3);
1047 
1048 	/* Why is this nybblified, when the MSB is *always* zero ?
1049 	   Anyway, we can't take address of bitfield, so make a
1050 	   good-faith guess at where it starts.
1051 	*/
1052 
1053 	shptr = munge_int32 (*(&header->hdr.s.FrequencyBias+1),
1054 			     shptr, 2);
1055 
1056 	if (snd_wavefront_cmd (dev,
1057 			   header->size ?
1058 			   WFC_DOWNLOAD_SAMPLE : WFC_DOWNLOAD_SAMPLE_HEADER,
1059 			   NULL, sample_hdr)) {
1060 		snd_printk ("sample %sdownload refused.\n",
1061 			    header->size ? "" : "header ");
1062 		return -EIO;
1063 	}
1064 
1065 	if (header->size == 0) {
1066 		goto sent; /* Sorry. Just had to have one somewhere */
1067 	}
1068 
1069 	data_end = dataptr + length;
1070 
1071 	/* Do any initial skip over an unused channel's data */
1072 
1073 	dataptr += initial_skip;
1074 
1075 	for (written = 0, blocknum = 0;
1076 	     written < length; written += max_blksize, blocknum++) {
1077 
1078 		if ((length - written) > max_blksize) {
1079 			blocksize = max_blksize;
1080 		} else {
1081 			/* round to nearest 16-byte value */
1082 			blocksize = ALIGN(length - written, 8);
1083 		}
1084 
1085 		if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_BLOCK, NULL, NULL)) {
1086 			snd_printk ("download block "
1087 				    "request refused.\n");
1088 			return -EIO;
1089 		}
1090 
1091 		for (i = 0; i < blocksize; i++) {
1092 
1093 			if (dataptr < data_end) {
1094 
1095 				__get_user (sample_short, dataptr);
1096 				dataptr += skip;
1097 
1098 				if (data_is_unsigned) { /* GUS ? */
1099 
1100 					if (WF_SAMPLE_IS_8BIT(&header->hdr.s)) {
1101 
1102 						/* 8 bit sample
1103 						 resolution, sign
1104 						 extend both bytes.
1105 						*/
1106 
1107 						((unsigned char*)
1108 						 &sample_short)[0] += 0x7f;
1109 						((unsigned char*)
1110 						 &sample_short)[1] += 0x7f;
1111 
1112 					} else {
1113 
1114 						/* 16 bit sample
1115 						 resolution, sign
1116 						 extend the MSB.
1117 						*/
1118 
1119 						sample_short += 0x7fff;
1120 					}
1121 				}
1122 
1123 			} else {
1124 
1125 				/* In padding section of final block:
1126 
1127 				   Don't fetch unsupplied data from
1128 				   user space, just continue with
1129 				   whatever the final value was.
1130 				*/
1131 			}
1132 
1133 			if (i < blocksize - 1) {
1134 				outw (sample_short, dev->block_port);
1135 			} else {
1136 				outw (sample_short, dev->last_block_port);
1137 			}
1138 		}
1139 
1140 		/* Get "DMA page acknowledge", even though its really
1141 		   nothing to do with DMA at all.
1142 		*/
1143 
1144 		if ((dma_ack = wavefront_read (dev)) != WF_DMA_ACK) {
1145 			if (dma_ack == -1) {
1146 				snd_printk ("upload sample "
1147 					    "DMA ack timeout\n");
1148 				return -EIO;
1149 			} else {
1150 				snd_printk ("upload sample "
1151 					    "DMA ack error 0x%x\n",
1152 					    dma_ack);
1153 				return -EIO;
1154 			}
1155 		}
1156 	}
1157 
1158 	dev->sample_status[header->number] = (WF_SLOT_FILLED|WF_ST_SAMPLE);
1159 
1160 	/* Note, label is here because sending the sample header shouldn't
1161 	   alter the sample_status info at all.
1162 	*/
1163 
1164  sent:
1165 	return (0);
1166 }
1167 
1168 static int
1169 wavefront_send_alias (snd_wavefront_t *dev, wavefront_patch_info *header)
1170 
1171 {
1172 	unsigned char alias_hdr[WF_ALIAS_BYTES];
1173 
1174 	DPRINT (WF_DEBUG_LOAD_PATCH, "download alias, %d is "
1175 				      "alias for %d\n",
1176 				      header->number,
1177 				      header->hdr.a.OriginalSample);
1178 
1179 	munge_int32 (header->number, &alias_hdr[0], 2);
1180 	munge_int32 (header->hdr.a.OriginalSample, &alias_hdr[2], 2);
1181 	munge_int32 (*((unsigned int *)&header->hdr.a.sampleStartOffset),
1182 		     &alias_hdr[4], 4);
1183 	munge_int32 (*((unsigned int *)&header->hdr.a.loopStartOffset),
1184 		     &alias_hdr[8], 4);
1185 	munge_int32 (*((unsigned int *)&header->hdr.a.loopEndOffset),
1186 		     &alias_hdr[12], 4);
1187 	munge_int32 (*((unsigned int *)&header->hdr.a.sampleEndOffset),
1188 		     &alias_hdr[16], 4);
1189 	munge_int32 (header->hdr.a.FrequencyBias, &alias_hdr[20], 3);
1190 	munge_int32 (*(&header->hdr.a.FrequencyBias+1), &alias_hdr[23], 2);
1191 
1192 	if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_SAMPLE_ALIAS, NULL, alias_hdr)) {
1193 		snd_printk ("download alias failed.\n");
1194 		return -EIO;
1195 	}
1196 
1197 	dev->sample_status[header->number] = (WF_SLOT_FILLED|WF_ST_ALIAS);
1198 
1199 	return (0);
1200 }
1201 
1202 static int
1203 wavefront_send_multisample (snd_wavefront_t *dev, wavefront_patch_info *header)
1204 {
1205 	int i;
1206 	int num_samples;
1207 	unsigned char *msample_hdr;
1208 
1209 	msample_hdr = kmalloc(WF_MSAMPLE_BYTES, GFP_KERNEL);
1210 	if (! msample_hdr)
1211 		return -ENOMEM;
1212 
1213 	munge_int32 (header->number, &msample_hdr[0], 2);
1214 
1215 	/* You'll recall at this point that the "number of samples" value
1216 	   in a wavefront_multisample struct is actually the log2 of the
1217 	   real number of samples.
1218 	*/
1219 
1220 	num_samples = (1<<(header->hdr.ms.NumberOfSamples&7));
1221 	msample_hdr[2] = (unsigned char) header->hdr.ms.NumberOfSamples;
1222 
1223 	DPRINT (WF_DEBUG_LOAD_PATCH, "multi %d with %d=%d samples\n",
1224 				      header->number,
1225 				      header->hdr.ms.NumberOfSamples,
1226 				      num_samples);
1227 
1228 	for (i = 0; i < num_samples; i++) {
1229 		DPRINT(WF_DEBUG_LOAD_PATCH|WF_DEBUG_DATA, "sample[%d] = %d\n",
1230 		       i, header->hdr.ms.SampleNumber[i]);
1231 		munge_int32 (header->hdr.ms.SampleNumber[i],
1232 		     &msample_hdr[3+(i*2)], 2);
1233 	}
1234 
1235 	/* Need a hack here to pass in the number of bytes
1236 	   to be written to the synth. This is ugly, and perhaps
1237 	   one day, I'll fix it.
1238 	*/
1239 
1240 	if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_MULTISAMPLE,
1241 			   (unsigned char *) (long) ((num_samples*2)+3),
1242 			   msample_hdr)) {
1243 		snd_printk ("download of multisample failed.\n");
1244 		kfree(msample_hdr);
1245 		return -EIO;
1246 	}
1247 
1248 	dev->sample_status[header->number] = (WF_SLOT_FILLED|WF_ST_MULTISAMPLE);
1249 
1250 	kfree(msample_hdr);
1251 	return (0);
1252 }
1253 
1254 static int
1255 wavefront_fetch_multisample (snd_wavefront_t *dev,
1256 			     wavefront_patch_info *header)
1257 {
1258 	int i;
1259 	unsigned char log_ns[1];
1260 	unsigned char number[2];
1261 	int num_samples;
1262 
1263 	munge_int32 (header->number, number, 2);
1264 
1265 	if (snd_wavefront_cmd (dev, WFC_UPLOAD_MULTISAMPLE, log_ns, number)) {
1266 		snd_printk ("upload multisample failed.\n");
1267 		return -EIO;
1268 	}
1269 
1270 	DPRINT (WF_DEBUG_DATA, "msample %d has %d samples\n",
1271 				header->number, log_ns[0]);
1272 
1273 	header->hdr.ms.NumberOfSamples = log_ns[0];
1274 
1275 	/* get the number of samples ... */
1276 
1277 	num_samples = (1 << log_ns[0]);
1278 
1279 	for (i = 0; i < num_samples; i++) {
1280 		char d[2];
1281 		int val;
1282 
1283 		if ((val = wavefront_read (dev)) == -1) {
1284 			snd_printk ("upload multisample failed "
1285 				    "during sample loop.\n");
1286 			return -EIO;
1287 		}
1288 		d[0] = val;
1289 
1290 		if ((val = wavefront_read (dev)) == -1) {
1291 			snd_printk ("upload multisample failed "
1292 				    "during sample loop.\n");
1293 			return -EIO;
1294 		}
1295 		d[1] = val;
1296 
1297 		header->hdr.ms.SampleNumber[i] =
1298 			demunge_int32 ((unsigned char *) d, 2);
1299 
1300 		DPRINT (WF_DEBUG_DATA, "msample sample[%d] = %d\n",
1301 					i, header->hdr.ms.SampleNumber[i]);
1302 	}
1303 
1304 	return (0);
1305 }
1306 
1307 
1308 static int
1309 wavefront_send_drum (snd_wavefront_t *dev, wavefront_patch_info *header)
1310 
1311 {
1312 	unsigned char drumbuf[WF_DRUM_BYTES];
1313 	wavefront_drum *drum = &header->hdr.d;
1314 	int i;
1315 
1316 	DPRINT (WF_DEBUG_LOAD_PATCH, "downloading edrum for MIDI "
1317 		"note %d, patch = %d\n",
1318 		header->number, drum->PatchNumber);
1319 
1320 	drumbuf[0] = header->number & 0x7f;
1321 
1322 	for (i = 0; i < 4; i++) {
1323 		munge_int32 (((unsigned char *)drum)[i], &drumbuf[1+(i*2)], 2);
1324 	}
1325 
1326 	if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_EDRUM_PROGRAM, NULL, drumbuf)) {
1327 		snd_printk ("download drum failed.\n");
1328 		return -EIO;
1329 	}
1330 
1331 	return (0);
1332 }
1333 
1334 static int
1335 wavefront_find_free_sample (snd_wavefront_t *dev)
1336 
1337 {
1338 	int i;
1339 
1340 	for (i = 0; i < WF_MAX_SAMPLE; i++) {
1341 		if (!(dev->sample_status[i] & WF_SLOT_FILLED)) {
1342 			return i;
1343 		}
1344 	}
1345 	snd_printk ("no free sample slots!\n");
1346 	return -1;
1347 }
1348 
1349 #if 0
1350 static int
1351 wavefront_find_free_patch (snd_wavefront_t *dev)
1352 
1353 {
1354 	int i;
1355 
1356 	for (i = 0; i < WF_MAX_PATCH; i++) {
1357 		if (!(dev->patch_status[i] & WF_SLOT_FILLED)) {
1358 			return i;
1359 		}
1360 	}
1361 	snd_printk ("no free patch slots!\n");
1362 	return -1;
1363 }
1364 #endif
1365 
1366 static int
1367 wavefront_load_patch (snd_wavefront_t *dev, const char __user *addr)
1368 {
1369 	wavefront_patch_info *header;
1370 	int err;
1371 
1372 	header = kmalloc(sizeof(*header), GFP_KERNEL);
1373 	if (! header)
1374 		return -ENOMEM;
1375 
1376 	if (copy_from_user (header, addr, sizeof(wavefront_patch_info) -
1377 			    sizeof(wavefront_any))) {
1378 		snd_printk ("bad address for load patch.\n");
1379 		err = -EFAULT;
1380 		goto __error;
1381 	}
1382 
1383 	DPRINT (WF_DEBUG_LOAD_PATCH, "download "
1384 				      "Sample type: %d "
1385 				      "Sample number: %d "
1386 				      "Sample size: %d\n",
1387 				      header->subkey,
1388 				      header->number,
1389 				      header->size);
1390 
1391 	switch (header->subkey) {
1392 	case WF_ST_SAMPLE:  /* sample or sample_header, based on patch->size */
1393 
1394 		if (copy_from_user (&header->hdr.s, header->hdrptr,
1395 				    sizeof (wavefront_sample))) {
1396 			err = -EFAULT;
1397 			break;
1398 		}
1399 
1400 		err = wavefront_send_sample (dev, header, header->dataptr, 0);
1401 		break;
1402 
1403 	case WF_ST_MULTISAMPLE:
1404 
1405 		if (copy_from_user (&header->hdr.s, header->hdrptr,
1406 				    sizeof (wavefront_multisample))) {
1407 			err = -EFAULT;
1408 			break;
1409 		}
1410 
1411 		err = wavefront_send_multisample (dev, header);
1412 		break;
1413 
1414 	case WF_ST_ALIAS:
1415 
1416 		if (copy_from_user (&header->hdr.a, header->hdrptr,
1417 				    sizeof (wavefront_alias))) {
1418 			err = -EFAULT;
1419 			break;
1420 		}
1421 
1422 		err = wavefront_send_alias (dev, header);
1423 		break;
1424 
1425 	case WF_ST_DRUM:
1426 		if (copy_from_user (&header->hdr.d, header->hdrptr,
1427 				    sizeof (wavefront_drum))) {
1428 			err = -EFAULT;
1429 			break;
1430 		}
1431 
1432 		err = wavefront_send_drum (dev, header);
1433 		break;
1434 
1435 	case WF_ST_PATCH:
1436 		if (copy_from_user (&header->hdr.p, header->hdrptr,
1437 				    sizeof (wavefront_patch))) {
1438 			err = -EFAULT;
1439 			break;
1440 		}
1441 
1442 		err = wavefront_send_patch (dev, header);
1443 		break;
1444 
1445 	case WF_ST_PROGRAM:
1446 		if (copy_from_user (&header->hdr.pr, header->hdrptr,
1447 				    sizeof (wavefront_program))) {
1448 			err = -EFAULT;
1449 			break;
1450 		}
1451 
1452 		err = wavefront_send_program (dev, header);
1453 		break;
1454 
1455 	default:
1456 		snd_printk ("unknown patch type %d.\n",
1457 			    header->subkey);
1458 		err = -EINVAL;
1459 		break;
1460 	}
1461 
1462  __error:
1463 	kfree(header);
1464 	return err;
1465 }
1466 
1467 /***********************************************************************
1468 WaveFront: hardware-dependent interface
1469 ***********************************************************************/
1470 
1471 static void
1472 process_sample_hdr (u8 *buf)
1473 
1474 {
1475 	wavefront_sample s;
1476 	u8 *ptr;
1477 
1478 	ptr = buf;
1479 
1480 	/* The board doesn't send us an exact copy of a "wavefront_sample"
1481 	   in response to an Upload Sample Header command. Instead, we
1482 	   have to convert the data format back into our data structure,
1483 	   just as in the Download Sample command, where we have to do
1484 	   something very similar in the reverse direction.
1485 	*/
1486 
1487 	*((u32 *) &s.sampleStartOffset) = demunge_int32 (ptr, 4); ptr += 4;
1488 	*((u32 *) &s.loopStartOffset) = demunge_int32 (ptr, 4); ptr += 4;
1489 	*((u32 *) &s.loopEndOffset) = demunge_int32 (ptr, 4); ptr += 4;
1490 	*((u32 *) &s.sampleEndOffset) = demunge_int32 (ptr, 4); ptr += 4;
1491 	*((u32 *) &s.FrequencyBias) = demunge_int32 (ptr, 3); ptr += 3;
1492 
1493 	s.SampleResolution = *ptr & 0x3;
1494 	s.Loop = *ptr & 0x8;
1495 	s.Bidirectional = *ptr & 0x10;
1496 	s.Reverse = *ptr & 0x40;
1497 
1498 	/* Now copy it back to where it came from */
1499 
1500 	memcpy (buf, (unsigned char *) &s, sizeof (wavefront_sample));
1501 }
1502 
1503 static int
1504 wavefront_synth_control (snd_wavefront_card_t *acard,
1505 			 wavefront_control *wc)
1506 
1507 {
1508 	snd_wavefront_t *dev = &acard->wavefront;
1509 	unsigned char patchnumbuf[2];
1510 	int i;
1511 
1512 	DPRINT (WF_DEBUG_CMD, "synth control with "
1513 		"cmd 0x%x\n", wc->cmd);
1514 
1515 	/* Pre-handling of or for various commands */
1516 
1517 	switch (wc->cmd) {
1518 
1519 	case WFC_DISABLE_INTERRUPTS:
1520 		snd_printk ("interrupts disabled.\n");
1521 		outb (0x80|0x20, dev->control_port);
1522 		dev->interrupts_are_midi = 1;
1523 		return 0;
1524 
1525 	case WFC_ENABLE_INTERRUPTS:
1526 		snd_printk ("interrupts enabled.\n");
1527 		outb (0x80|0x40|0x20, dev->control_port);
1528 		dev->interrupts_are_midi = 1;
1529 		return 0;
1530 
1531 	case WFC_INTERRUPT_STATUS:
1532 		wc->rbuf[0] = dev->interrupts_are_midi;
1533 		return 0;
1534 
1535 	case WFC_ROMSAMPLES_RDONLY:
1536 		dev->rom_samples_rdonly = wc->wbuf[0];
1537 		wc->status = 0;
1538 		return 0;
1539 
1540 	case WFC_IDENTIFY_SLOT_TYPE:
1541 		i = wc->wbuf[0] | (wc->wbuf[1] << 7);
1542 		if (i <0 || i >= WF_MAX_SAMPLE) {
1543 			snd_printk ("invalid slot ID %d\n",
1544 				i);
1545 			wc->status = EINVAL;
1546 			return -EINVAL;
1547 		}
1548 		wc->rbuf[0] = dev->sample_status[i];
1549 		wc->status = 0;
1550 		return 0;
1551 
1552 	case WFC_DEBUG_DRIVER:
1553 		dev->debug = wc->wbuf[0];
1554 		snd_printk ("debug = 0x%x\n", dev->debug);
1555 		return 0;
1556 
1557 	case WFC_UPLOAD_PATCH:
1558 		munge_int32 (*((u32 *) wc->wbuf), patchnumbuf, 2);
1559 		memcpy (wc->wbuf, patchnumbuf, 2);
1560 		break;
1561 
1562 	case WFC_UPLOAD_MULTISAMPLE:
1563 		/* multisamples have to be handled differently, and
1564 		   cannot be dealt with properly by snd_wavefront_cmd() alone.
1565 		*/
1566 		wc->status = wavefront_fetch_multisample
1567 			(dev, (wavefront_patch_info *) wc->rbuf);
1568 		return 0;
1569 
1570 	case WFC_UPLOAD_SAMPLE_ALIAS:
1571 		snd_printk ("support for sample alias upload "
1572 			"being considered.\n");
1573 		wc->status = EINVAL;
1574 		return -EINVAL;
1575 	}
1576 
1577 	wc->status = snd_wavefront_cmd (dev, wc->cmd, wc->rbuf, wc->wbuf);
1578 
1579 	/* Post-handling of certain commands.
1580 
1581 	   In particular, if the command was an upload, demunge the data
1582 	   so that the user-level doesn't have to think about it.
1583 	*/
1584 
1585 	if (wc->status == 0) {
1586 		switch (wc->cmd) {
1587 			/* intercept any freemem requests so that we know
1588 			   we are always current with the user-level view
1589 			   of things.
1590 			*/
1591 
1592 		case WFC_REPORT_FREE_MEMORY:
1593 			dev->freemem = demunge_int32 (wc->rbuf, 4);
1594 			break;
1595 
1596 		case WFC_UPLOAD_PATCH:
1597 			demunge_buf (wc->rbuf, wc->rbuf, WF_PATCH_BYTES);
1598 			break;
1599 
1600 		case WFC_UPLOAD_PROGRAM:
1601 			demunge_buf (wc->rbuf, wc->rbuf, WF_PROGRAM_BYTES);
1602 			break;
1603 
1604 		case WFC_UPLOAD_EDRUM_PROGRAM:
1605 			demunge_buf (wc->rbuf, wc->rbuf, WF_DRUM_BYTES - 1);
1606 			break;
1607 
1608 		case WFC_UPLOAD_SAMPLE_HEADER:
1609 			process_sample_hdr (wc->rbuf);
1610 			break;
1611 
1612 		case WFC_UPLOAD_SAMPLE_ALIAS:
1613 			snd_printk ("support for "
1614 				    "sample aliases still "
1615 				    "being considered.\n");
1616 			break;
1617 
1618 		case WFC_VMIDI_OFF:
1619 			snd_wavefront_midi_disable_virtual (acard);
1620 			break;
1621 
1622 		case WFC_VMIDI_ON:
1623 			snd_wavefront_midi_enable_virtual (acard);
1624 			break;
1625 		}
1626 	}
1627 
1628 	return 0;
1629 }
1630 
1631 int
1632 snd_wavefront_synth_open (struct snd_hwdep *hw, struct file *file)
1633 
1634 {
1635 	if (!try_module_get(hw->card->module))
1636 		return -EFAULT;
1637 	file->private_data = hw;
1638 	return 0;
1639 }
1640 
1641 int
1642 snd_wavefront_synth_release (struct snd_hwdep *hw, struct file *file)
1643 
1644 {
1645 	module_put(hw->card->module);
1646 	return 0;
1647 }
1648 
1649 int
1650 snd_wavefront_synth_ioctl (struct snd_hwdep *hw, struct file *file,
1651 			   unsigned int cmd, unsigned long arg)
1652 
1653 {
1654 	struct snd_card *card;
1655 	snd_wavefront_t *dev;
1656 	snd_wavefront_card_t *acard;
1657 	wavefront_control *wc;
1658 	void __user *argp = (void __user *)arg;
1659 	int err;
1660 
1661 	card = (struct snd_card *) hw->card;
1662 
1663 	if (snd_BUG_ON(!card))
1664 		return -ENODEV;
1665 	if (snd_BUG_ON(!card->private_data))
1666 		return -ENODEV;
1667 
1668 	acard = card->private_data;
1669 	dev = &acard->wavefront;
1670 
1671 	switch (cmd) {
1672 	case WFCTL_LOAD_SPP:
1673 		if (wavefront_load_patch (dev, argp) != 0) {
1674 			return -EIO;
1675 		}
1676 		break;
1677 
1678 	case WFCTL_WFCMD:
1679 		wc = memdup_user(argp, sizeof(*wc));
1680 		if (IS_ERR(wc))
1681 			return PTR_ERR(wc);
1682 
1683 		if (wavefront_synth_control (acard, wc) < 0)
1684 			err = -EIO;
1685 		else if (copy_to_user (argp, wc, sizeof (*wc)))
1686 			err = -EFAULT;
1687 		else
1688 			err = 0;
1689 		kfree(wc);
1690 		return err;
1691 
1692 	default:
1693 		return -EINVAL;
1694 	}
1695 
1696 	return 0;
1697 }
1698 
1699 
1700 /***********************************************************************/
1701 /*  WaveFront: interface for card-level wavefront module               */
1702 /***********************************************************************/
1703 
1704 void
1705 snd_wavefront_internal_interrupt (snd_wavefront_card_t *card)
1706 {
1707 	snd_wavefront_t *dev = &card->wavefront;
1708 
1709 	/*
1710 	   Some comments on interrupts. I attempted a version of this
1711 	   driver that used interrupts throughout the code instead of
1712 	   doing busy and/or sleep-waiting. Alas, it appears that once
1713 	   the Motorola firmware is downloaded, the card *never*
1714 	   generates an RX interrupt. These are successfully generated
1715 	   during firmware loading, and after that wavefront_status()
1716 	   reports that an interrupt is pending on the card from time
1717 	   to time, but it never seems to be delivered to this
1718 	   driver. Note also that wavefront_status() continues to
1719 	   report that RX interrupts are enabled, suggesting that I
1720 	   didn't goof up and disable them by mistake.
1721 
1722 	   Thus, I stepped back to a prior version of
1723 	   wavefront_wait(), the only place where this really
1724 	   matters. Its sad, but I've looked through the code to check
1725 	   on things, and I really feel certain that the Motorola
1726 	   firmware prevents RX-ready interrupts.
1727 	*/
1728 
1729 	if ((wavefront_status(dev) & (STAT_INTR_READ|STAT_INTR_WRITE)) == 0) {
1730 		return;
1731 	}
1732 
1733 	spin_lock(&dev->irq_lock);
1734 	dev->irq_ok = 1;
1735 	dev->irq_cnt++;
1736 	spin_unlock(&dev->irq_lock);
1737 	wake_up(&dev->interrupt_sleeper);
1738 }
1739 
1740 /* STATUS REGISTER
1741 
1742 0 Host Rx Interrupt Enable (1=Enabled)
1743 1 Host Rx Register Full (1=Full)
1744 2 Host Rx Interrupt Pending (1=Interrupt)
1745 3 Unused
1746 4 Host Tx Interrupt (1=Enabled)
1747 5 Host Tx Register empty (1=Empty)
1748 6 Host Tx Interrupt Pending (1=Interrupt)
1749 7 Unused
1750 */
1751 
1752 static int
1753 snd_wavefront_interrupt_bits (int irq)
1754 
1755 {
1756 	int bits;
1757 
1758 	switch (irq) {
1759 	case 9:
1760 		bits = 0x00;
1761 		break;
1762 	case 5:
1763 		bits = 0x08;
1764 		break;
1765 	case 12:
1766 		bits = 0x10;
1767 		break;
1768 	case 15:
1769 		bits = 0x18;
1770 		break;
1771 
1772 	default:
1773 		snd_printk ("invalid IRQ %d\n", irq);
1774 		bits = -1;
1775 	}
1776 
1777 	return bits;
1778 }
1779 
1780 static void
1781 wavefront_should_cause_interrupt (snd_wavefront_t *dev,
1782 				  int val, int port, unsigned long timeout)
1783 
1784 {
1785 	wait_queue_t wait;
1786 
1787 	init_waitqueue_entry(&wait, current);
1788 	spin_lock_irq(&dev->irq_lock);
1789 	add_wait_queue(&dev->interrupt_sleeper, &wait);
1790 	dev->irq_ok = 0;
1791 	outb (val,port);
1792 	spin_unlock_irq(&dev->irq_lock);
1793 	while (!dev->irq_ok && time_before(jiffies, timeout)) {
1794 		schedule_timeout_uninterruptible(1);
1795 		barrier();
1796 	}
1797 }
1798 
1799 static int
1800 wavefront_reset_to_cleanliness (snd_wavefront_t *dev)
1801 
1802 {
1803 	int bits;
1804 	int hwv[2];
1805 
1806 	/* IRQ already checked */
1807 
1808 	bits = snd_wavefront_interrupt_bits (dev->irq);
1809 
1810 	/* try reset of port */
1811 
1812 	outb (0x0, dev->control_port);
1813 
1814 	/* At this point, the board is in reset, and the H/W initialization
1815 	   register is accessed at the same address as the data port.
1816 
1817 	   Bit 7 - Enable IRQ Driver
1818 	   0 - Tri-state the Wave-Board drivers for the PC Bus IRQs
1819 	   1 - Enable IRQ selected by bits 5:3 to be driven onto the PC Bus.
1820 
1821 	   Bit 6 - MIDI Interface Select
1822 
1823 	   0 - Use the MIDI Input from the 26-pin WaveBlaster
1824 	   compatible header as the serial MIDI source
1825 	   1 - Use the MIDI Input from the 9-pin D connector as the
1826 	   serial MIDI source.
1827 
1828 	   Bits 5:3 - IRQ Selection
1829 	   0 0 0 - IRQ 2/9
1830 	   0 0 1 - IRQ 5
1831 	   0 1 0 - IRQ 12
1832 	   0 1 1 - IRQ 15
1833 	   1 0 0 - Reserved
1834 	   1 0 1 - Reserved
1835 	   1 1 0 - Reserved
1836 	   1 1 1 - Reserved
1837 
1838 	   Bits 2:1 - Reserved
1839 	   Bit 0 - Disable Boot ROM
1840 	   0 - memory accesses to 03FC30-03FFFFH utilize the internal Boot ROM
1841 	   1 - memory accesses to 03FC30-03FFFFH are directed to external
1842 	   storage.
1843 
1844 	*/
1845 
1846 	/* configure hardware: IRQ, enable interrupts,
1847 	   plus external 9-pin MIDI interface selected
1848 	*/
1849 
1850 	outb (0x80 | 0x40 | bits, dev->data_port);
1851 
1852 	/* CONTROL REGISTER
1853 
1854 	   0 Host Rx Interrupt Enable (1=Enabled)      0x1
1855 	   1 Unused                                    0x2
1856 	   2 Unused                                    0x4
1857 	   3 Unused                                    0x8
1858 	   4 Host Tx Interrupt Enable                 0x10
1859 	   5 Mute (0=Mute; 1=Play)                    0x20
1860 	   6 Master Interrupt Enable (1=Enabled)      0x40
1861 	   7 Master Reset (0=Reset; 1=Run)            0x80
1862 
1863 	   Take us out of reset, mute output, master + TX + RX interrupts on.
1864 
1865 	   We'll get an interrupt presumably to tell us that the TX
1866 	   register is clear.
1867 	*/
1868 
1869 	wavefront_should_cause_interrupt(dev, 0x80|0x40|0x10|0x1,
1870 					 dev->control_port,
1871 					 (reset_time*HZ)/100);
1872 
1873 	/* Note: data port is now the data port, not the h/w initialization
1874 	   port.
1875 	 */
1876 
1877 	if (!dev->irq_ok) {
1878 		snd_printk ("intr not received after h/w un-reset.\n");
1879 		goto gone_bad;
1880 	}
1881 
1882 	/* Note: data port is now the data port, not the h/w initialization
1883 	   port.
1884 
1885 	   At this point, only "HW VERSION" or "DOWNLOAD OS" commands
1886 	   will work. So, issue one of them, and wait for TX
1887 	   interrupt. This can take a *long* time after a cold boot,
1888 	   while the ISC ROM does its RAM test. The SDK says up to 4
1889 	   seconds - with 12MB of RAM on a Tropez+, it takes a lot
1890 	   longer than that (~16secs). Note that the card understands
1891 	   the difference between a warm and a cold boot, so
1892 	   subsequent ISC2115 reboots (say, caused by module
1893 	   reloading) will get through this much faster.
1894 
1895 	   XXX Interesting question: why is no RX interrupt received first ?
1896 	*/
1897 
1898 	wavefront_should_cause_interrupt(dev, WFC_HARDWARE_VERSION,
1899 					 dev->data_port, ramcheck_time*HZ);
1900 
1901 	if (!dev->irq_ok) {
1902 		snd_printk ("post-RAM-check interrupt not received.\n");
1903 		goto gone_bad;
1904 	}
1905 
1906 	if (!wavefront_wait (dev, STAT_CAN_READ)) {
1907 		snd_printk ("no response to HW version cmd.\n");
1908 		goto gone_bad;
1909 	}
1910 
1911 	if ((hwv[0] = wavefront_read (dev)) == -1) {
1912 		snd_printk ("board not responding correctly.\n");
1913 		goto gone_bad;
1914 	}
1915 
1916 	if (hwv[0] == 0xFF) { /* NAK */
1917 
1918 		/* Board's RAM test failed. Try to read error code,
1919 		   and tell us about it either way.
1920 		*/
1921 
1922 		if ((hwv[0] = wavefront_read (dev)) == -1) {
1923 			snd_printk ("on-board RAM test failed "
1924 				    "(bad error code).\n");
1925 		} else {
1926 			snd_printk ("on-board RAM test failed "
1927 				    "(error code: 0x%x).\n",
1928 				hwv[0]);
1929 		}
1930 		goto gone_bad;
1931 	}
1932 
1933 	/* We're OK, just get the next byte of the HW version response */
1934 
1935 	if ((hwv[1] = wavefront_read (dev)) == -1) {
1936 		snd_printk ("incorrect h/w response.\n");
1937 		goto gone_bad;
1938 	}
1939 
1940 	snd_printk ("hardware version %d.%d\n",
1941 		    hwv[0], hwv[1]);
1942 
1943 	return 0;
1944 
1945 
1946      gone_bad:
1947 	return (1);
1948 }
1949 
1950 static int
1951 wavefront_download_firmware (snd_wavefront_t *dev, char *path)
1952 
1953 {
1954 	const unsigned char *buf;
1955 	int len, err;
1956 	int section_cnt_downloaded = 0;
1957 	const struct firmware *firmware;
1958 
1959 	err = request_firmware(&firmware, path, dev->card->dev);
1960 	if (err < 0) {
1961 		snd_printk(KERN_ERR "firmware (%s) download failed!!!\n", path);
1962 		return 1;
1963 	}
1964 
1965 	len = 0;
1966 	buf = firmware->data;
1967 	for (;;) {
1968 		int section_length = *(signed char *)buf;
1969 		if (section_length == 0)
1970 			break;
1971 		if (section_length < 0 || section_length > WF_SECTION_MAX) {
1972 			snd_printk(KERN_ERR
1973 				   "invalid firmware section length %d\n",
1974 				   section_length);
1975 			goto failure;
1976 		}
1977 		buf++;
1978 		len++;
1979 
1980 		if (firmware->size < len + section_length) {
1981 			snd_printk(KERN_ERR "firmware section read error.\n");
1982 			goto failure;
1983 		}
1984 
1985 		/* Send command */
1986 		if (wavefront_write(dev, WFC_DOWNLOAD_OS))
1987 			goto failure;
1988 
1989 		for (; section_length; section_length--) {
1990 			if (wavefront_write(dev, *buf))
1991 				goto failure;
1992 			buf++;
1993 			len++;
1994 		}
1995 
1996 		/* get ACK */
1997 		if (!wavefront_wait(dev, STAT_CAN_READ)) {
1998 			snd_printk(KERN_ERR "time out for firmware ACK.\n");
1999 			goto failure;
2000 		}
2001 		err = inb(dev->data_port);
2002 		if (err != WF_ACK) {
2003 			snd_printk(KERN_ERR
2004 				   "download of section #%d not "
2005 				   "acknowledged, ack = 0x%x\n",
2006 				   section_cnt_downloaded + 1, err);
2007 			goto failure;
2008 		}
2009 
2010 		section_cnt_downloaded++;
2011 	}
2012 
2013 	release_firmware(firmware);
2014 	return 0;
2015 
2016  failure:
2017 	release_firmware(firmware);
2018 	snd_printk(KERN_ERR "firmware download failed!!!\n");
2019 	return 1;
2020 }
2021 
2022 
2023 static int
2024 wavefront_do_reset (snd_wavefront_t *dev)
2025 
2026 {
2027 	char voices[1];
2028 
2029 	if (wavefront_reset_to_cleanliness (dev)) {
2030 		snd_printk ("hw reset failed.\n");
2031 		goto gone_bad;
2032 	}
2033 
2034 	if (dev->israw) {
2035 		if (wavefront_download_firmware (dev, ospath)) {
2036 			goto gone_bad;
2037 		}
2038 
2039 		dev->israw = 0;
2040 
2041 		/* Wait for the OS to get running. The protocol for
2042 		   this is non-obvious, and was determined by
2043 		   using port-IO tracing in DOSemu and some
2044 		   experimentation here.
2045 
2046 		   Rather than using timed waits, use interrupts creatively.
2047 		*/
2048 
2049 		wavefront_should_cause_interrupt (dev, WFC_NOOP,
2050 						  dev->data_port,
2051 						  (osrun_time*HZ));
2052 
2053 		if (!dev->irq_ok) {
2054 			snd_printk ("no post-OS interrupt.\n");
2055 			goto gone_bad;
2056 		}
2057 
2058 		/* Now, do it again ! */
2059 
2060 		wavefront_should_cause_interrupt (dev, WFC_NOOP,
2061 						  dev->data_port, (10*HZ));
2062 
2063 		if (!dev->irq_ok) {
2064 			snd_printk ("no post-OS interrupt(2).\n");
2065 			goto gone_bad;
2066 		}
2067 
2068 		/* OK, no (RX/TX) interrupts any more, but leave mute
2069 		   in effect.
2070 		*/
2071 
2072 		outb (0x80|0x40, dev->control_port);
2073 	}
2074 
2075 	/* SETUPSND.EXE asks for sample memory config here, but since i
2076 	   have no idea how to interpret the result, we'll forget
2077 	   about it.
2078 	*/
2079 
2080 	if ((dev->freemem = wavefront_freemem (dev)) < 0) {
2081 		goto gone_bad;
2082 	}
2083 
2084 	snd_printk ("available DRAM %dk\n", dev->freemem / 1024);
2085 
2086 	if (wavefront_write (dev, 0xf0) ||
2087 	    wavefront_write (dev, 1) ||
2088 	    (wavefront_read (dev) < 0)) {
2089 		dev->debug = 0;
2090 		snd_printk ("MPU emulation mode not set.\n");
2091 		goto gone_bad;
2092 	}
2093 
2094 	voices[0] = 32;
2095 
2096 	if (snd_wavefront_cmd (dev, WFC_SET_NVOICES, NULL, voices)) {
2097 		snd_printk ("cannot set number of voices to 32.\n");
2098 		goto gone_bad;
2099 	}
2100 
2101 
2102 	return 0;
2103 
2104  gone_bad:
2105 	/* reset that sucker so that it doesn't bother us. */
2106 
2107 	outb (0x0, dev->control_port);
2108 	dev->interrupts_are_midi = 0;
2109 	return 1;
2110 }
2111 
2112 int
2113 snd_wavefront_start (snd_wavefront_t *dev)
2114 
2115 {
2116 	int samples_are_from_rom;
2117 
2118 	/* IMPORTANT: assumes that snd_wavefront_detect() and/or
2119 	   wavefront_reset_to_cleanliness() has already been called
2120 	*/
2121 
2122 	if (dev->israw) {
2123 		samples_are_from_rom = 1;
2124 	} else {
2125 		/* XXX is this always true ? */
2126 		samples_are_from_rom = 0;
2127 	}
2128 
2129 	if (dev->israw || fx_raw) {
2130 		if (wavefront_do_reset (dev)) {
2131 			return -1;
2132 		}
2133 	}
2134 	/* Check for FX device, present only on Tropez+ */
2135 
2136 	dev->has_fx = (snd_wavefront_fx_detect (dev) == 0);
2137 
2138 	if (dev->has_fx && fx_raw) {
2139 		snd_wavefront_fx_start (dev);
2140 	}
2141 
2142 	wavefront_get_sample_status (dev, samples_are_from_rom);
2143 	wavefront_get_program_status (dev);
2144 	wavefront_get_patch_status (dev);
2145 
2146 	/* Start normal operation: unreset, master interrupt enabled, no mute
2147 	*/
2148 
2149 	outb (0x80|0x40|0x20, dev->control_port);
2150 
2151 	return (0);
2152 }
2153 
2154 int
2155 snd_wavefront_detect (snd_wavefront_card_t *card)
2156 
2157 {
2158 	unsigned char   rbuf[4], wbuf[4];
2159 	snd_wavefront_t *dev = &card->wavefront;
2160 
2161 	/* returns zero if a WaveFront card is successfully detected.
2162 	   negative otherwise.
2163 	*/
2164 
2165 	dev->israw = 0;
2166 	dev->has_fx = 0;
2167 	dev->debug = debug_default;
2168 	dev->interrupts_are_midi = 0;
2169 	dev->irq_cnt = 0;
2170 	dev->rom_samples_rdonly = 1;
2171 
2172 	if (snd_wavefront_cmd (dev, WFC_FIRMWARE_VERSION, rbuf, wbuf) == 0) {
2173 
2174 		dev->fw_version[0] = rbuf[0];
2175 		dev->fw_version[1] = rbuf[1];
2176 
2177 		snd_printk ("firmware %d.%d already loaded.\n",
2178 			    rbuf[0], rbuf[1]);
2179 
2180 		/* check that a command actually works */
2181 
2182 		if (snd_wavefront_cmd (dev, WFC_HARDWARE_VERSION,
2183 				       rbuf, wbuf) == 0) {
2184 			dev->hw_version[0] = rbuf[0];
2185 			dev->hw_version[1] = rbuf[1];
2186 		} else {
2187 			snd_printk ("not raw, but no "
2188 				    "hardware version!\n");
2189 			return -1;
2190 		}
2191 
2192 		if (!wf_raw) {
2193 			return 0;
2194 		} else {
2195 			snd_printk ("reloading firmware as you requested.\n");
2196 			dev->israw = 1;
2197 		}
2198 
2199 	} else {
2200 
2201 		dev->israw = 1;
2202 		snd_printk ("no response to firmware probe, assume raw.\n");
2203 
2204 	}
2205 
2206 	return 0;
2207 }
2208 
2209 MODULE_FIRMWARE(DEFAULT_OSPATH);
2210