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