Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.4 1292 lines 30 kB view raw
1/* 2 * sound/oss/sb_common.c 3 * 4 * Common routines for Sound Blaster compatible cards. 5 * 6 * 7 * Copyright (C) by Hannu Savolainen 1993-1997 8 * 9 * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL) 10 * Version 2 (June 1991). See the "COPYING" file distributed with this software 11 * for more info. 12 * 13 * 14 * Daniel J. Rodriksson: Modified sbintr to handle 8 and 16 bit interrupts 15 * for full duplex support ( only sb16 by now ) 16 * Rolf Fokkens: Added (BETA?) support for ES1887 chips. 17 * (fokkensr@vertis.nl) Which means: You can adjust the recording levels. 18 * 19 * 2000/01/18 - separated sb_card and sb_common - 20 * Jeff Garzik <jgarzik@pobox.com> 21 * 22 * 2000/09/18 - got rid of attach_uart401 23 * Arnaldo Carvalho de Melo <acme@conectiva.com.br> 24 * 25 * 2001/01/26 - replaced CLI/STI with spinlocks 26 * Chris Rankin <rankinc@zipworld.com.au> 27 */ 28 29#include <linux/init.h> 30#include <linux/interrupt.h> 31#include <linux/module.h> 32#include <linux/delay.h> 33#include <linux/spinlock.h> 34#include <linux/slab.h> 35 36#include "sound_config.h" 37#include "sound_firmware.h" 38 39#include "mpu401.h" 40 41#include "sb_mixer.h" 42#include "sb.h" 43#include "sb_ess.h" 44 45/* 46 * global module flag 47 */ 48 49int sb_be_quiet; 50 51static sb_devc *detected_devc; /* For communication from probe to init */ 52static sb_devc *last_devc; /* For MPU401 initialization */ 53 54static unsigned char jazz_irq_bits[] = { 55 0, 0, 2, 3, 0, 1, 0, 4, 0, 2, 5, 0, 0, 0, 0, 6 56}; 57 58static unsigned char jazz_dma_bits[] = { 59 0, 1, 0, 2, 0, 3, 0, 4 60}; 61 62void *smw_free; 63 64/* 65 * Jazz16 chipset specific control variables 66 */ 67 68static int jazz16_base; /* Not detected */ 69static unsigned char jazz16_bits; /* I/O relocation bits */ 70static DEFINE_SPINLOCK(jazz16_lock); 71 72/* 73 * Logitech Soundman Wave specific initialization code 74 */ 75 76#ifdef SMW_MIDI0001_INCLUDED 77#include "smw-midi0001.h" 78#else 79static unsigned char *smw_ucode; 80static int smw_ucodeLen; 81 82#endif 83 84static sb_devc *last_sb; /* Last sb loaded */ 85 86int sb_dsp_command(sb_devc * devc, unsigned char val) 87{ 88 int i; 89 unsigned long limit; 90 91 limit = jiffies + HZ / 10; /* Timeout */ 92 93 /* 94 * Note! the i<500000 is an emergency exit. The sb_dsp_command() is sometimes 95 * called while interrupts are disabled. This means that the timer is 96 * disabled also. However the timeout situation is a abnormal condition. 97 * Normally the DSP should be ready to accept commands after just couple of 98 * loops. 99 */ 100 101 for (i = 0; i < 500000 && (limit-jiffies)>0; i++) 102 { 103 if ((inb(DSP_STATUS) & 0x80) == 0) 104 { 105 outb((val), DSP_COMMAND); 106 return 1; 107 } 108 } 109 printk(KERN_WARNING "Sound Blaster: DSP command(%x) timeout.\n", val); 110 return 0; 111} 112 113int sb_dsp_get_byte(sb_devc * devc) 114{ 115 int i; 116 117 for (i = 1000; i; i--) 118 { 119 if (inb(DSP_DATA_AVAIL) & 0x80) 120 return inb(DSP_READ); 121 } 122 return 0xffff; 123} 124 125static void sb_intr (sb_devc *devc) 126{ 127 int status; 128 unsigned char src = 0xff; 129 130 if (devc->model == MDL_SB16) 131 { 132 src = sb_getmixer(devc, IRQ_STAT); /* Interrupt source register */ 133 134 if (src & 4) /* MPU401 interrupt */ 135 if(devc->midi_irq_cookie) 136 uart401intr(devc->irq, devc->midi_irq_cookie); 137 138 if (!(src & 3)) 139 return; /* Not a DSP interrupt */ 140 } 141 if (devc->intr_active && (!devc->fullduplex || (src & 0x01))) 142 { 143 switch (devc->irq_mode) 144 { 145 case IMODE_OUTPUT: 146 DMAbuf_outputintr(devc->dev, 1); 147 break; 148 149 case IMODE_INPUT: 150 DMAbuf_inputintr(devc->dev); 151 break; 152 153 case IMODE_INIT: 154 break; 155 156 case IMODE_MIDI: 157 sb_midi_interrupt(devc); 158 break; 159 160 default: 161 /* printk(KERN_WARNING "Sound Blaster: Unexpected interrupt\n"); */ 162 ; 163 } 164 } 165 else if (devc->intr_active_16 && (src & 0x02)) 166 { 167 switch (devc->irq_mode_16) 168 { 169 case IMODE_OUTPUT: 170 DMAbuf_outputintr(devc->dev, 1); 171 break; 172 173 case IMODE_INPUT: 174 DMAbuf_inputintr(devc->dev); 175 break; 176 177 case IMODE_INIT: 178 break; 179 180 default: 181 /* printk(KERN_WARNING "Sound Blaster: Unexpected interrupt\n"); */ 182 ; 183 } 184 } 185 /* 186 * Acknowledge interrupts 187 */ 188 189 if (src & 0x01) 190 status = inb(DSP_DATA_AVAIL); 191 192 if (devc->model == MDL_SB16 && src & 0x02) 193 status = inb(DSP_DATA_AVL16); 194} 195 196static void pci_intr(sb_devc *devc) 197{ 198 int src = inb(devc->pcibase+0x1A); 199 src&=3; 200 if(src) 201 sb_intr(devc); 202} 203 204static irqreturn_t sbintr(int irq, void *dev_id) 205{ 206 sb_devc *devc = dev_id; 207 208 devc->irq_ok = 1; 209 210 switch (devc->model) { 211 case MDL_ESSPCI: 212 pci_intr (devc); 213 break; 214 215 case MDL_ESS: 216 ess_intr (devc); 217 break; 218 default: 219 sb_intr (devc); 220 break; 221 } 222 return IRQ_HANDLED; 223} 224 225int sb_dsp_reset(sb_devc * devc) 226{ 227 int loopc; 228 229 DEB(printk("Entered sb_dsp_reset()\n")); 230 231 if (devc->model == MDL_ESS) return ess_dsp_reset (devc); 232 233 /* This is only for non-ESS chips */ 234 235 outb(1, DSP_RESET); 236 237 udelay(10); 238 outb(0, DSP_RESET); 239 udelay(30); 240 241 for (loopc = 0; loopc < 1000 && !(inb(DSP_DATA_AVAIL) & 0x80); loopc++); 242 243 if (inb(DSP_READ) != 0xAA) 244 { 245 DDB(printk("sb: No response to RESET\n")); 246 return 0; /* Sorry */ 247 } 248 249 DEB(printk("sb_dsp_reset() OK\n")); 250 251 return 1; 252} 253 254static void dsp_get_vers(sb_devc * devc) 255{ 256 int i; 257 258 unsigned long flags; 259 260 DDB(printk("Entered dsp_get_vers()\n")); 261 spin_lock_irqsave(&devc->lock, flags); 262 devc->major = devc->minor = 0; 263 sb_dsp_command(devc, 0xe1); /* Get version */ 264 265 for (i = 100000; i; i--) 266 { 267 if (inb(DSP_DATA_AVAIL) & 0x80) 268 { 269 if (devc->major == 0) 270 devc->major = inb(DSP_READ); 271 else 272 { 273 devc->minor = inb(DSP_READ); 274 break; 275 } 276 } 277 } 278 spin_unlock_irqrestore(&devc->lock, flags); 279 DDB(printk("DSP version %d.%02d\n", devc->major, devc->minor)); 280} 281 282static int sb16_set_dma_hw(sb_devc * devc) 283{ 284 int bits; 285 286 if (devc->dma8 != 0 && devc->dma8 != 1 && devc->dma8 != 3) 287 { 288 printk(KERN_ERR "SB16: Invalid 8 bit DMA (%d)\n", devc->dma8); 289 return 0; 290 } 291 bits = (1 << devc->dma8); 292 293 if (devc->dma16 >= 5 && devc->dma16 <= 7) 294 bits |= (1 << devc->dma16); 295 296 sb_setmixer(devc, DMA_NR, bits); 297 return 1; 298} 299 300static void sb16_set_mpu_port(sb_devc * devc, struct address_info *hw_config) 301{ 302 /* 303 * This routine initializes new MIDI port setup register of SB Vibra (CT2502). 304 */ 305 unsigned char bits = sb_getmixer(devc, 0x84) & ~0x06; 306 307 switch (hw_config->io_base) 308 { 309 case 0x300: 310 sb_setmixer(devc, 0x84, bits | 0x04); 311 break; 312 313 case 0x330: 314 sb_setmixer(devc, 0x84, bits | 0x00); 315 break; 316 317 default: 318 sb_setmixer(devc, 0x84, bits | 0x02); /* Disable MPU */ 319 printk(KERN_ERR "SB16: Invalid MIDI I/O port %x\n", hw_config->io_base); 320 } 321} 322 323static int sb16_set_irq_hw(sb_devc * devc, int level) 324{ 325 int ival; 326 327 switch (level) 328 { 329 case 5: 330 ival = 2; 331 break; 332 case 7: 333 ival = 4; 334 break; 335 case 9: 336 ival = 1; 337 break; 338 case 10: 339 ival = 8; 340 break; 341 default: 342 printk(KERN_ERR "SB16: Invalid IRQ%d\n", level); 343 return 0; 344 } 345 sb_setmixer(devc, IRQ_NR, ival); 346 return 1; 347} 348 349static void relocate_Jazz16(sb_devc * devc, struct address_info *hw_config) 350{ 351 unsigned char bits = 0; 352 unsigned long flags; 353 354 if (jazz16_base != 0 && jazz16_base != hw_config->io_base) 355 return; 356 357 switch (hw_config->io_base) 358 { 359 case 0x220: 360 bits = 1; 361 break; 362 case 0x240: 363 bits = 2; 364 break; 365 case 0x260: 366 bits = 3; 367 break; 368 default: 369 return; 370 } 371 bits = jazz16_bits = bits << 5; 372 jazz16_base = hw_config->io_base; 373 374 /* 375 * Magic wake up sequence by writing to 0x201 (aka Joystick port) 376 */ 377 spin_lock_irqsave(&jazz16_lock, flags); 378 outb((0xAF), 0x201); 379 outb((0x50), 0x201); 380 outb((bits), 0x201); 381 spin_unlock_irqrestore(&jazz16_lock, flags); 382} 383 384static int init_Jazz16(sb_devc * devc, struct address_info *hw_config) 385{ 386 char name[100]; 387 /* 388 * First try to check that the card has Jazz16 chip. It identifies itself 389 * by returning 0x12 as response to DSP command 0xfa. 390 */ 391 392 if (!sb_dsp_command(devc, 0xfa)) 393 return 0; 394 395 if (sb_dsp_get_byte(devc) != 0x12) 396 return 0; 397 398 /* 399 * OK so far. Now configure the IRQ and DMA channel used by the card. 400 */ 401 if (hw_config->irq < 1 || hw_config->irq > 15 || jazz_irq_bits[hw_config->irq] == 0) 402 { 403 printk(KERN_ERR "Jazz16: Invalid interrupt (IRQ%d)\n", hw_config->irq); 404 return 0; 405 } 406 if (hw_config->dma < 0 || hw_config->dma > 3 || jazz_dma_bits[hw_config->dma] == 0) 407 { 408 printk(KERN_ERR "Jazz16: Invalid 8 bit DMA (DMA%d)\n", hw_config->dma); 409 return 0; 410 } 411 if (hw_config->dma2 < 0) 412 { 413 printk(KERN_ERR "Jazz16: No 16 bit DMA channel defined\n"); 414 return 0; 415 } 416 if (hw_config->dma2 < 5 || hw_config->dma2 > 7 || jazz_dma_bits[hw_config->dma2] == 0) 417 { 418 printk(KERN_ERR "Jazz16: Invalid 16 bit DMA (DMA%d)\n", hw_config->dma2); 419 return 0; 420 } 421 devc->dma16 = hw_config->dma2; 422 423 if (!sb_dsp_command(devc, 0xfb)) 424 return 0; 425 426 if (!sb_dsp_command(devc, jazz_dma_bits[hw_config->dma] | 427 (jazz_dma_bits[hw_config->dma2] << 4))) 428 return 0; 429 430 if (!sb_dsp_command(devc, jazz_irq_bits[hw_config->irq])) 431 return 0; 432 433 /* 434 * Now we have configured a standard Jazz16 device. 435 */ 436 devc->model = MDL_JAZZ; 437 strcpy(name, "Jazz16"); 438 439 hw_config->name = "Jazz16"; 440 devc->caps |= SB_NO_MIDI; 441 return 1; 442} 443 444static void relocate_ess1688(sb_devc * devc) 445{ 446 unsigned char bits; 447 448 switch (devc->base) 449 { 450 case 0x220: 451 bits = 0x04; 452 break; 453 case 0x230: 454 bits = 0x05; 455 break; 456 case 0x240: 457 bits = 0x06; 458 break; 459 case 0x250: 460 bits = 0x07; 461 break; 462 default: 463 return; /* Wrong port */ 464 } 465 466 DDB(printk("Doing ESS1688 address selection\n")); 467 468 /* 469 * ES1688 supports two alternative ways for software address config. 470 * First try the so called Read-Sequence-Key method. 471 */ 472 473 /* Reset the sequence logic */ 474 inb(0x229); 475 inb(0x229); 476 inb(0x229); 477 478 /* Perform the read sequence */ 479 inb(0x22b); 480 inb(0x229); 481 inb(0x22b); 482 inb(0x229); 483 inb(0x229); 484 inb(0x22b); 485 inb(0x229); 486 487 /* Select the base address by reading from it. Then probe using the port. */ 488 inb(devc->base); 489 if (sb_dsp_reset(devc)) /* Bingo */ 490 return; 491 492#if 0 /* This causes system lockups (Nokia 386/25 at least) */ 493 /* 494 * The last resort is the system control register method. 495 */ 496 497 outb((0x00), 0xfb); /* 0xFB is the unlock register */ 498 outb((0x00), 0xe0); /* Select index 0 */ 499 outb((bits), 0xe1); /* Write the config bits */ 500 outb((0x00), 0xf9); /* 0xFB is the lock register */ 501#endif 502} 503 504int sb_dsp_detect(struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo) 505{ 506 sb_devc sb_info; 507 sb_devc *devc = &sb_info; 508 509 memset((char *) &sb_info, 0, sizeof(sb_info)); /* Zero everything */ 510 511 /* Copy module options in place */ 512 if(sbmo) memcpy(&devc->sbmo, sbmo, sizeof(struct sb_module_options)); 513 514 sb_info.my_mididev = -1; 515 sb_info.my_mixerdev = -1; 516 sb_info.dev = -1; 517 518 /* 519 * Initialize variables 520 */ 521 522 DDB(printk("sb_dsp_detect(%x) entered\n", hw_config->io_base)); 523 524 spin_lock_init(&devc->lock); 525 devc->type = hw_config->card_subtype; 526 527 devc->base = hw_config->io_base; 528 devc->irq = hw_config->irq; 529 devc->dma8 = hw_config->dma; 530 531 devc->dma16 = -1; 532 devc->pcibase = pciio; 533 534 if(pci == SB_PCI_ESSMAESTRO) 535 { 536 devc->model = MDL_ESSPCI; 537 devc->caps |= SB_PCI_IRQ; 538 hw_config->driver_use_1 |= SB_PCI_IRQ; 539 hw_config->card_subtype = MDL_ESSPCI; 540 } 541 542 if(pci == SB_PCI_YAMAHA) 543 { 544 devc->model = MDL_YMPCI; 545 devc->caps |= SB_PCI_IRQ; 546 hw_config->driver_use_1 |= SB_PCI_IRQ; 547 hw_config->card_subtype = MDL_YMPCI; 548 549 printk("Yamaha PCI mode.\n"); 550 } 551 552 if (devc->sbmo.acer) 553 { 554 unsigned long flags; 555 556 spin_lock_irqsave(&devc->lock, flags); 557 inb(devc->base + 0x09); 558 inb(devc->base + 0x09); 559 inb(devc->base + 0x09); 560 inb(devc->base + 0x0b); 561 inb(devc->base + 0x09); 562 inb(devc->base + 0x0b); 563 inb(devc->base + 0x09); 564 inb(devc->base + 0x09); 565 inb(devc->base + 0x0b); 566 inb(devc->base + 0x09); 567 inb(devc->base + 0x00); 568 spin_unlock_irqrestore(&devc->lock, flags); 569 } 570 /* 571 * Detect the device 572 */ 573 574 if (sb_dsp_reset(devc)) 575 dsp_get_vers(devc); 576 else 577 devc->major = 0; 578 579 if (devc->type == 0 || devc->type == MDL_JAZZ || devc->type == MDL_SMW) 580 if (devc->major == 0 || (devc->major == 3 && devc->minor == 1)) 581 relocate_Jazz16(devc, hw_config); 582 583 if (devc->major == 0 && (devc->type == MDL_ESS || devc->type == 0)) 584 relocate_ess1688(devc); 585 586 if (!sb_dsp_reset(devc)) 587 { 588 DDB(printk("SB reset failed\n")); 589#ifdef MODULE 590 printk(KERN_INFO "sb: dsp reset failed.\n"); 591#endif 592 return 0; 593 } 594 if (devc->major == 0) 595 dsp_get_vers(devc); 596 597 if (devc->major == 3 && devc->minor == 1) 598 { 599 if (devc->type == MDL_AZTECH) /* SG Washington? */ 600 { 601 if (sb_dsp_command(devc, 0x09)) 602 if (sb_dsp_command(devc, 0x00)) /* Enter WSS mode */ 603 { 604 int i; 605 606 /* Have some delay */ 607 for (i = 0; i < 10000; i++) 608 inb(DSP_DATA_AVAIL); 609 devc->caps = SB_NO_AUDIO | SB_NO_MIDI; /* Mixer only */ 610 devc->model = MDL_AZTECH; 611 } 612 } 613 } 614 615 if(devc->type == MDL_ESSPCI) 616 devc->model = MDL_ESSPCI; 617 618 if(devc->type == MDL_YMPCI) 619 { 620 printk("YMPCI selected\n"); 621 devc->model = MDL_YMPCI; 622 } 623 624 /* 625 * Save device information for sb_dsp_init() 626 */ 627 628 629 detected_devc = kmalloc(sizeof(sb_devc), GFP_KERNEL); 630 if (detected_devc == NULL) 631 { 632 printk(KERN_ERR "sb: Can't allocate memory for device information\n"); 633 return 0; 634 } 635 memcpy(detected_devc, devc, sizeof(sb_devc)); 636 MDB(printk(KERN_INFO "SB %d.%02d detected OK (%x)\n", devc->major, devc->minor, hw_config->io_base)); 637 return 1; 638} 639 640int sb_dsp_init(struct address_info *hw_config, struct module *owner) 641{ 642 sb_devc *devc; 643 char name[100]; 644 extern int sb_be_quiet; 645 int mixer22, mixer30; 646 647/* 648 * Check if we had detected a SB device earlier 649 */ 650 DDB(printk("sb_dsp_init(%x) entered\n", hw_config->io_base)); 651 name[0] = 0; 652 653 if (detected_devc == NULL) 654 { 655 MDB(printk("No detected device\n")); 656 return 0; 657 } 658 devc = detected_devc; 659 detected_devc = NULL; 660 661 if (devc->base != hw_config->io_base) 662 { 663 DDB(printk("I/O port mismatch\n")); 664 release_region(devc->base, 16); 665 return 0; 666 } 667 /* 668 * Now continue initialization of the device 669 */ 670 671 devc->caps = hw_config->driver_use_1; 672 673 if (!((devc->caps & SB_NO_AUDIO) && (devc->caps & SB_NO_MIDI)) && hw_config->irq > 0) 674 { /* IRQ setup */ 675 676 /* 677 * ESS PCI cards do shared PCI IRQ stuff. Since they 678 * will get shared PCI irq lines we must cope. 679 */ 680 681 int i=(devc->caps&SB_PCI_IRQ)?IRQF_SHARED:0; 682 683 if (request_irq(hw_config->irq, sbintr, i, "soundblaster", devc) < 0) 684 { 685 printk(KERN_ERR "SB: Can't allocate IRQ%d\n", hw_config->irq); 686 release_region(devc->base, 16); 687 return 0; 688 } 689 devc->irq_ok = 0; 690 691 if (devc->major == 4) 692 if (!sb16_set_irq_hw(devc, devc->irq)) /* Unsupported IRQ */ 693 { 694 free_irq(devc->irq, devc); 695 release_region(devc->base, 16); 696 return 0; 697 } 698 if ((devc->type == 0 || devc->type == MDL_ESS) && 699 devc->major == 3 && devc->minor == 1) 700 { /* Handle various chipsets which claim they are SB Pro compatible */ 701 if ((devc->type != 0 && devc->type != MDL_ESS) || 702 !ess_init(devc, hw_config)) 703 { 704 if ((devc->type != 0 && devc->type != MDL_JAZZ && 705 devc->type != MDL_SMW) || !init_Jazz16(devc, hw_config)) 706 { 707 DDB(printk("This is a genuine SB Pro\n")); 708 } 709 } 710 } 711 if (devc->major == 4 && devc->minor <= 11 ) /* Won't work */ 712 devc->irq_ok = 1; 713 else 714 { 715 int n; 716 717 for (n = 0; n < 3 && devc->irq_ok == 0; n++) 718 { 719 if (sb_dsp_command(devc, 0xf2)) /* Cause interrupt immediately */ 720 { 721 int i; 722 723 for (i = 0; !devc->irq_ok && i < 10000; i++); 724 } 725 } 726 if (!devc->irq_ok) 727 printk(KERN_WARNING "sb: Interrupt test on IRQ%d failed - Probable IRQ conflict\n", devc->irq); 728 else 729 { 730 DDB(printk("IRQ test OK (IRQ%d)\n", devc->irq)); 731 } 732 } 733 } /* IRQ setup */ 734 735 last_sb = devc; 736 737 switch (devc->major) 738 { 739 case 1: /* SB 1.0 or 1.5 */ 740 devc->model = hw_config->card_subtype = MDL_SB1; 741 break; 742 743 case 2: /* SB 2.x */ 744 if (devc->minor == 0) 745 devc->model = hw_config->card_subtype = MDL_SB2; 746 else 747 devc->model = hw_config->card_subtype = MDL_SB201; 748 break; 749 750 case 3: /* SB Pro and most clones */ 751 switch (devc->model) { 752 case 0: 753 devc->model = hw_config->card_subtype = MDL_SBPRO; 754 if (hw_config->name == NULL) 755 hw_config->name = "Sound Blaster Pro (8 BIT ONLY)"; 756 break; 757 case MDL_ESS: 758 ess_dsp_init(devc, hw_config); 759 break; 760 } 761 break; 762 763 case 4: 764 devc->model = hw_config->card_subtype = MDL_SB16; 765 /* 766 * ALS007 and ALS100 return DSP version 4.2 and have 2 post-reset !=0 767 * registers at 0x3c and 0x4c (output ctrl registers on ALS007) whereas 768 * a "standard" SB16 doesn't have a register at 0x4c. ALS100 actively 769 * updates register 0x22 whenever 0x30 changes, as per the SB16 spec. 770 * Since ALS007 doesn't, this can be used to differentiate the 2 cards. 771 */ 772 if ((devc->minor == 2) && sb_getmixer(devc,0x3c) && sb_getmixer(devc,0x4c)) 773 { 774 mixer30 = sb_getmixer(devc,0x30); 775 sb_setmixer(devc,0x22,(mixer22=sb_getmixer(devc,0x22)) & 0x0f); 776 sb_setmixer(devc,0x30,0xff); 777 /* ALS100 will force 0x30 to 0xf8 like SB16; ALS007 will allow 0xff. */ 778 /* Register 0x22 & 0xf0 on ALS100 == 0xf0; on ALS007 it == 0x10. */ 779 if ((sb_getmixer(devc,0x30) != 0xff) || ((sb_getmixer(devc,0x22) & 0xf0) != 0x10)) 780 { 781 devc->submodel = SUBMDL_ALS100; 782 if (hw_config->name == NULL) 783 hw_config->name = "Sound Blaster 16 (ALS-100)"; 784 } 785 else 786 { 787 sb_setmixer(devc,0x3c,0x1f); /* Enable all inputs */ 788 sb_setmixer(devc,0x4c,0x1f); 789 sb_setmixer(devc,0x22,mixer22); /* Restore 0x22 to original value */ 790 devc->submodel = SUBMDL_ALS007; 791 if (hw_config->name == NULL) 792 hw_config->name = "Sound Blaster 16 (ALS-007)"; 793 } 794 sb_setmixer(devc,0x30,mixer30); 795 } 796 else if (hw_config->name == NULL) 797 hw_config->name = "Sound Blaster 16"; 798 799 if (hw_config->dma2 == -1) 800 devc->dma16 = devc->dma8; 801 else if (hw_config->dma2 < 5 || hw_config->dma2 > 7) 802 { 803 printk(KERN_WARNING "SB16: Bad or missing 16 bit DMA channel\n"); 804 devc->dma16 = devc->dma8; 805 } 806 else 807 devc->dma16 = hw_config->dma2; 808 809 if(!sb16_set_dma_hw(devc)) { 810 free_irq(devc->irq, devc); 811 release_region(hw_config->io_base, 16); 812 return 0; 813 } 814 815 devc->caps |= SB_NO_MIDI; 816 } 817 818 if (!(devc->caps & SB_NO_MIXER)) 819 if (devc->major == 3 || devc->major == 4) 820 sb_mixer_init(devc, owner); 821 822 if (!(devc->caps & SB_NO_MIDI)) 823 sb_dsp_midi_init(devc, owner); 824 825 if (hw_config->name == NULL) 826 hw_config->name = "Sound Blaster (8 BIT/MONO ONLY)"; 827 828 sprintf(name, "%s (%d.%02d)", hw_config->name, devc->major, devc->minor); 829 conf_printf(name, hw_config); 830 831 /* 832 * Assuming that a sound card is Sound Blaster (compatible) is the most common 833 * configuration error and the mother of all problems. Usually sound cards 834 * emulate SB Pro but in addition they have a 16 bit native mode which should be 835 * used in Unix. See Readme.cards for more information about configuring OSS/Free 836 * properly. 837 */ 838 if (devc->model <= MDL_SBPRO) 839 { 840 if (devc->major == 3 && devc->minor != 1) /* "True" SB Pro should have v3.1 (rare ones may have 3.2). */ 841 { 842 printk(KERN_INFO "This sound card may not be fully Sound Blaster Pro compatible.\n"); 843 printk(KERN_INFO "In many cases there is another way to configure OSS so that\n"); 844 printk(KERN_INFO "it works properly with OSS (for example in 16 bit mode).\n"); 845 printk(KERN_INFO "Please ignore this message if you _really_ have a SB Pro.\n"); 846 } 847 else if (!sb_be_quiet && devc->model == MDL_SBPRO) 848 { 849 printk(KERN_INFO "SB DSP version is just %d.%02d which means that your card is\n", devc->major, devc->minor); 850 printk(KERN_INFO "several years old (8 bit only device) or alternatively the sound driver\n"); 851 printk(KERN_INFO "is incorrectly configured.\n"); 852 } 853 } 854 hw_config->card_subtype = devc->model; 855 hw_config->slots[0]=devc->dev; 856 last_devc = devc; /* For SB MPU detection */ 857 858 if (!(devc->caps & SB_NO_AUDIO) && devc->dma8 >= 0) 859 { 860 if (sound_alloc_dma(devc->dma8, "SoundBlaster8")) 861 { 862 printk(KERN_WARNING "Sound Blaster: Can't allocate 8 bit DMA channel %d\n", devc->dma8); 863 } 864 if (devc->dma16 >= 0 && devc->dma16 != devc->dma8) 865 { 866 if (sound_alloc_dma(devc->dma16, "SoundBlaster16")) 867 printk(KERN_WARNING "Sound Blaster: can't allocate 16 bit DMA channel %d.\n", devc->dma16); 868 } 869 sb_audio_init(devc, name, owner); 870 hw_config->slots[0]=devc->dev; 871 } 872 else 873 { 874 MDB(printk("Sound Blaster: no audio devices found.\n")); 875 } 876 return 1; 877} 878 879/* if (sbmpu) below we allow mpu401 to manage the midi devs 880 otherwise we have to unload them. (Andrzej Krzysztofowicz) */ 881 882void sb_dsp_unload(struct address_info *hw_config, int sbmpu) 883{ 884 sb_devc *devc; 885 886 devc = audio_devs[hw_config->slots[0]]->devc; 887 888 if (devc && devc->base == hw_config->io_base) 889 { 890 if ((devc->model & MDL_ESS) && devc->pcibase) 891 release_region(devc->pcibase, 8); 892 893 release_region(devc->base, 16); 894 895 if (!(devc->caps & SB_NO_AUDIO)) 896 { 897 sound_free_dma(devc->dma8); 898 if (devc->dma16 >= 0) 899 sound_free_dma(devc->dma16); 900 } 901 if (!(devc->caps & SB_NO_AUDIO && devc->caps & SB_NO_MIDI)) 902 { 903 if (devc->irq > 0) 904 free_irq(devc->irq, devc); 905 906 sb_mixer_unload(devc); 907 /* We don't have to do this bit any more the UART401 is its own 908 master -- Krzysztof Halasa */ 909 /* But we have to do it, if UART401 is not detected */ 910 if (!sbmpu) 911 sound_unload_mididev(devc->my_mididev); 912 sound_unload_audiodev(devc->dev); 913 } 914 kfree(devc); 915 } 916 else 917 release_region(hw_config->io_base, 16); 918 919 kfree(detected_devc); 920} 921 922/* 923 * Mixer access routines 924 * 925 * ES1887 modifications: some mixer registers reside in the 926 * range above 0xa0. These must be accessed in another way. 927 */ 928 929void sb_setmixer(sb_devc * devc, unsigned int port, unsigned int value) 930{ 931 unsigned long flags; 932 933 if (devc->model == MDL_ESS) { 934 ess_setmixer (devc, port, value); 935 return; 936 } 937 938 spin_lock_irqsave(&devc->lock, flags); 939 940 outb(((unsigned char) (port & 0xff)), MIXER_ADDR); 941 udelay(20); 942 outb(((unsigned char) (value & 0xff)), MIXER_DATA); 943 udelay(20); 944 945 spin_unlock_irqrestore(&devc->lock, flags); 946} 947 948unsigned int sb_getmixer(sb_devc * devc, unsigned int port) 949{ 950 unsigned int val; 951 unsigned long flags; 952 953 if (devc->model == MDL_ESS) return ess_getmixer (devc, port); 954 955 spin_lock_irqsave(&devc->lock, flags); 956 957 outb(((unsigned char) (port & 0xff)), MIXER_ADDR); 958 udelay(20); 959 val = inb(MIXER_DATA); 960 udelay(20); 961 962 spin_unlock_irqrestore(&devc->lock, flags); 963 964 return val; 965} 966 967void sb_chgmixer 968 (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val) 969{ 970 int value; 971 972 value = sb_getmixer(devc, reg); 973 value = (value & ~mask) | (val & mask); 974 sb_setmixer(devc, reg, value); 975} 976 977/* 978 * MPU401 MIDI initialization. 979 */ 980 981static void smw_putmem(sb_devc * devc, int base, int addr, unsigned char val) 982{ 983 unsigned long flags; 984 985 spin_lock_irqsave(&jazz16_lock, flags); /* NOT the SB card? */ 986 987 outb((addr & 0xff), base + 1); /* Low address bits */ 988 outb((addr >> 8), base + 2); /* High address bits */ 989 outb((val), base); /* Data */ 990 991 spin_unlock_irqrestore(&jazz16_lock, flags); 992} 993 994static unsigned char smw_getmem(sb_devc * devc, int base, int addr) 995{ 996 unsigned long flags; 997 unsigned char val; 998 999 spin_lock_irqsave(&jazz16_lock, flags); /* NOT the SB card? */ 1000 1001 outb((addr & 0xff), base + 1); /* Low address bits */ 1002 outb((addr >> 8), base + 2); /* High address bits */ 1003 val = inb(base); /* Data */ 1004 1005 spin_unlock_irqrestore(&jazz16_lock, flags); 1006 return val; 1007} 1008 1009static int smw_midi_init(sb_devc * devc, struct address_info *hw_config) 1010{ 1011 int mpu_base = hw_config->io_base; 1012 int mp_base = mpu_base + 4; /* Microcontroller base */ 1013 int i; 1014 unsigned char control; 1015 1016 1017 /* 1018 * Reset the microcontroller so that the RAM can be accessed 1019 */ 1020 1021 control = inb(mpu_base + 7); 1022 outb((control | 3), mpu_base + 7); /* Set last two bits to 1 (?) */ 1023 outb(((control & 0xfe) | 2), mpu_base + 7); /* xxxxxxx0 resets the mc */ 1024 1025 mdelay(3); /* Wait at least 1ms */ 1026 1027 outb((control & 0xfc), mpu_base + 7); /* xxxxxx00 enables RAM */ 1028 1029 /* 1030 * Detect microcontroller by probing the 8k RAM area 1031 */ 1032 smw_putmem(devc, mp_base, 0, 0x00); 1033 smw_putmem(devc, mp_base, 1, 0xff); 1034 udelay(10); 1035 1036 if (smw_getmem(devc, mp_base, 0) != 0x00 || smw_getmem(devc, mp_base, 1) != 0xff) 1037 { 1038 DDB(printk("SM Wave: No microcontroller RAM detected (%02x, %02x)\n", smw_getmem(devc, mp_base, 0), smw_getmem(devc, mp_base, 1))); 1039 return 0; /* No RAM */ 1040 } 1041 /* 1042 * There is RAM so assume it's really a SM Wave 1043 */ 1044 1045 devc->model = MDL_SMW; 1046 smw_mixer_init(devc); 1047 1048#ifdef MODULE 1049 if (!smw_ucode) 1050 { 1051 smw_ucodeLen = mod_firmware_load("/etc/sound/midi0001.bin", (void *) &smw_ucode); 1052 smw_free = smw_ucode; 1053 } 1054#endif 1055 if (smw_ucodeLen > 0) 1056 { 1057 if (smw_ucodeLen != 8192) 1058 { 1059 printk(KERN_ERR "SM Wave: Invalid microcode (MIDI0001.BIN) length\n"); 1060 return 1; 1061 } 1062 /* 1063 * Download microcode 1064 */ 1065 1066 for (i = 0; i < 8192; i++) 1067 smw_putmem(devc, mp_base, i, smw_ucode[i]); 1068 1069 /* 1070 * Verify microcode 1071 */ 1072 1073 for (i = 0; i < 8192; i++) 1074 if (smw_getmem(devc, mp_base, i) != smw_ucode[i]) 1075 { 1076 printk(KERN_ERR "SM Wave: Microcode verification failed\n"); 1077 return 0; 1078 } 1079 } 1080 control = 0; 1081#ifdef SMW_SCSI_IRQ 1082 /* 1083 * Set the SCSI interrupt (IRQ2/9, IRQ3 or IRQ10). The SCSI interrupt 1084 * is disabled by default. 1085 * 1086 * FIXME - make this a module option 1087 * 1088 * BTW the Zilog 5380 SCSI controller is located at MPU base + 0x10. 1089 */ 1090 { 1091 static unsigned char scsi_irq_bits[] = { 1092 0, 0, 3, 1, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0 1093 }; 1094 control |= scsi_irq_bits[SMW_SCSI_IRQ] << 6; 1095 } 1096#endif 1097 1098#ifdef SMW_OPL4_ENABLE 1099 /* 1100 * Make the OPL4 chip visible on the PC bus at 0x380. 1101 * 1102 * There is no need to enable this feature since this driver 1103 * doesn't support OPL4 yet. Also there is no RAM in SM Wave so 1104 * enabling OPL4 is pretty useless. 1105 */ 1106 control |= 0x10; /* Uses IRQ12 if bit 0x20 == 0 */ 1107 /* control |= 0x20; Uncomment this if you want to use IRQ7 */ 1108#endif 1109 outb((control | 0x03), mpu_base + 7); /* xxxxxx11 restarts */ 1110 hw_config->name = "SoundMan Wave"; 1111 return 1; 1112} 1113 1114static int init_Jazz16_midi(sb_devc * devc, struct address_info *hw_config) 1115{ 1116 int mpu_base = hw_config->io_base; 1117 int sb_base = devc->base; 1118 int irq = hw_config->irq; 1119 1120 unsigned char bits = 0; 1121 unsigned long flags; 1122 1123 if (irq < 0) 1124 irq *= -1; 1125 1126 if (irq < 1 || irq > 15 || 1127 jazz_irq_bits[irq] == 0) 1128 { 1129 printk(KERN_ERR "Jazz16: Invalid MIDI interrupt (IRQ%d)\n", irq); 1130 return 0; 1131 } 1132 switch (sb_base) 1133 { 1134 case 0x220: 1135 bits = 1; 1136 break; 1137 case 0x240: 1138 bits = 2; 1139 break; 1140 case 0x260: 1141 bits = 3; 1142 break; 1143 default: 1144 return 0; 1145 } 1146 bits = jazz16_bits = bits << 5; 1147 switch (mpu_base) 1148 { 1149 case 0x310: 1150 bits |= 1; 1151 break; 1152 case 0x320: 1153 bits |= 2; 1154 break; 1155 case 0x330: 1156 bits |= 3; 1157 break; 1158 default: 1159 printk(KERN_ERR "Jazz16: Invalid MIDI I/O port %x\n", mpu_base); 1160 return 0; 1161 } 1162 /* 1163 * Magic wake up sequence by writing to 0x201 (aka Joystick port) 1164 */ 1165 spin_lock_irqsave(&jazz16_lock, flags); 1166 outb(0xAF, 0x201); 1167 outb(0x50, 0x201); 1168 outb(bits, 0x201); 1169 spin_unlock_irqrestore(&jazz16_lock, flags); 1170 1171 hw_config->name = "Jazz16"; 1172 smw_midi_init(devc, hw_config); 1173 1174 if (!sb_dsp_command(devc, 0xfb)) 1175 return 0; 1176 1177 if (!sb_dsp_command(devc, jazz_dma_bits[devc->dma8] | 1178 (jazz_dma_bits[devc->dma16] << 4))) 1179 return 0; 1180 1181 if (!sb_dsp_command(devc, jazz_irq_bits[devc->irq] | 1182 (jazz_irq_bits[irq] << 4))) 1183 return 0; 1184 1185 return 1; 1186} 1187 1188int probe_sbmpu(struct address_info *hw_config, struct module *owner) 1189{ 1190 sb_devc *devc = last_devc; 1191 int ret; 1192 1193 if (last_devc == NULL) 1194 return 0; 1195 1196 last_devc = NULL; 1197 1198 if (hw_config->io_base <= 0) 1199 { 1200 /* The real vibra16 is fine about this, but we have to go 1201 wipe up after Cyrix again */ 1202 1203 if(devc->model == MDL_SB16 && devc->minor >= 12) 1204 { 1205 unsigned char bits = sb_getmixer(devc, 0x84) & ~0x06; 1206 sb_setmixer(devc, 0x84, bits | 0x02); /* Disable MPU */ 1207 } 1208 return 0; 1209 } 1210 1211#if defined(CONFIG_SOUND_MPU401) 1212 if (devc->model == MDL_ESS) 1213 { 1214 struct resource *ports; 1215 ports = request_region(hw_config->io_base, 2, "mpu401"); 1216 if (!ports) { 1217 printk(KERN_ERR "sbmpu: I/O port conflict (%x)\n", hw_config->io_base); 1218 return 0; 1219 } 1220 if (!ess_midi_init(devc, hw_config)) { 1221 release_region(hw_config->io_base, 2); 1222 return 0; 1223 } 1224 hw_config->name = "ESS1xxx MPU"; 1225 devc->midi_irq_cookie = NULL; 1226 if (!probe_mpu401(hw_config, ports)) { 1227 release_region(hw_config->io_base, 2); 1228 return 0; 1229 } 1230 attach_mpu401(hw_config, owner); 1231 if (last_sb->irq == -hw_config->irq) 1232 last_sb->midi_irq_cookie = 1233 (void *)(long) hw_config->slots[1]; 1234 return 1; 1235 } 1236#endif 1237 1238 switch (devc->model) 1239 { 1240 case MDL_SB16: 1241 if (hw_config->io_base != 0x300 && hw_config->io_base != 0x330) 1242 { 1243 printk(KERN_ERR "SB16: Invalid MIDI port %x\n", hw_config->io_base); 1244 return 0; 1245 } 1246 hw_config->name = "Sound Blaster 16"; 1247 if (hw_config->irq < 3 || hw_config->irq == devc->irq) 1248 hw_config->irq = -devc->irq; 1249 if (devc->minor > 12) /* What is Vibra's version??? */ 1250 sb16_set_mpu_port(devc, hw_config); 1251 break; 1252 1253 case MDL_JAZZ: 1254 if (hw_config->irq < 3 || hw_config->irq == devc->irq) 1255 hw_config->irq = -devc->irq; 1256 if (!init_Jazz16_midi(devc, hw_config)) 1257 return 0; 1258 break; 1259 1260 case MDL_YMPCI: 1261 hw_config->name = "Yamaha PCI Legacy"; 1262 printk("Yamaha PCI legacy UART401 check.\n"); 1263 break; 1264 default: 1265 return 0; 1266 } 1267 1268 ret = probe_uart401(hw_config, owner); 1269 if (ret) 1270 last_sb->midi_irq_cookie=midi_devs[hw_config->slots[4]]->devc; 1271 return ret; 1272} 1273 1274void unload_sbmpu(struct address_info *hw_config) 1275{ 1276#if defined(CONFIG_SOUND_MPU401) 1277 if (!strcmp (hw_config->name, "ESS1xxx MPU")) { 1278 unload_mpu401(hw_config); 1279 return; 1280 } 1281#endif 1282 unload_uart401(hw_config); 1283} 1284 1285EXPORT_SYMBOL(sb_dsp_init); 1286EXPORT_SYMBOL(sb_dsp_detect); 1287EXPORT_SYMBOL(sb_dsp_unload); 1288EXPORT_SYMBOL(sb_be_quiet); 1289EXPORT_SYMBOL(probe_sbmpu); 1290EXPORT_SYMBOL(unload_sbmpu); 1291EXPORT_SYMBOL(smw_free); 1292MODULE_LICENSE("GPL");