1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 27 /* 28 * audio1575 Audio Driver 29 * 30 * The driver is primarily targeted at providing audio support for 31 * those systems which use the Uli M1575 audio core. 32 * 33 * The M1575 audio core, in AC'97 controller mode, has independent 34 * channels for PCM in, PCM out, mic in, modem in, and modem out. 35 * 36 * The AC'97 controller is a PCI bus master with scatter/gather 37 * support. Each channel has a DMA engine. Currently, we use only 38 * the PCM in and PCM out channels. Each DMA engine uses one buffer 39 * descriptor list. And the buffer descriptor list is an array of up 40 * to 32 entries, each of which describes a data buffer. Each entry 41 * contains a pointer to a data buffer, control bits, and the length 42 * of the buffer being pointed to, where the length is expressed as 43 * the number of samples. This, combined with the 16-bit sample size, 44 * gives the actual physical length of the buffer. 45 * 46 * NOTE: 47 * This driver depends on the drv/audio, misc/ac97 48 * modules being loaded first. 49 */ 50 51 #include <sys/types.h> 52 #include <sys/modctl.h> 53 #include <sys/kmem.h> 54 #include <sys/conf.h> 55 #include <sys/ddi.h> 56 #include <sys/sunddi.h> 57 #include <sys/pci.h> 58 #include <sys/note.h> 59 #include <sys/audio/audio_driver.h> 60 #include <sys/audio/ac97.h> 61 #include "audio1575.h" 62 63 /* 64 * Module linkage routines for the kernel 65 */ 66 static int audio1575_ddi_attach(dev_info_t *, ddi_attach_cmd_t); 67 static int audio1575_ddi_detach(dev_info_t *, ddi_detach_cmd_t); 68 static int audio1575_ddi_quiesce(dev_info_t *); 69 70 /* 71 * Entry point routine prototypes 72 */ 73 static int audio1575_open(void *, int, unsigned *, unsigned *, caddr_t *); 74 static void audio1575_close(void *); 75 static int audio1575_start(void *); 76 static void audio1575_stop(void *); 77 static int audio1575_format(void *); 78 static int audio1575_channels(void *); 79 static int audio1575_rate(void *); 80 static uint64_t audio1575_count(void *); 81 static void audio1575_sync(void *, unsigned); 82 static size_t audio1575_qlen(void *); 83 84 static audio_engine_ops_t audio1575_engine_ops = { 85 AUDIO_ENGINE_VERSION, 86 audio1575_open, 87 audio1575_close, 88 audio1575_start, 89 audio1575_stop, 90 audio1575_count, 91 audio1575_format, 92 audio1575_channels, 93 audio1575_rate, 94 audio1575_sync, 95 audio1575_qlen 96 }; 97 98 /* 99 * interrupt handler 100 */ 101 static uint_t audio1575_intr(caddr_t, caddr_t); 102 103 /* 104 * Local Routine Prototypes 105 */ 106 static int audio1575_attach(dev_info_t *); 107 static int audio1575_resume(dev_info_t *); 108 static int audio1575_detach(dev_info_t *); 109 static int audio1575_suspend(dev_info_t *); 110 111 static int audio1575_alloc_port(audio1575_state_t *, int, uint8_t); 112 static void audio1575_free_port(audio1575_port_t *); 113 static void audio1575_start_port(audio1575_port_t *); 114 static void audio1575_stop_port(audio1575_port_t *); 115 static void audio1575_reset_port(audio1575_port_t *); 116 static void audio1575_update_port(audio1575_port_t *); 117 118 static int audio1575_setup_intr(audio1575_state_t *); 119 static int audio1575_codec_sync(audio1575_state_t *); 120 static void audio1575_write_ac97(void *, uint8_t, uint16_t); 121 static uint16_t audio1575_read_ac97(void *, uint8_t); 122 static int audio1575_chip_init(audio1575_state_t *); 123 static int audio1575_map_regs(audio1575_state_t *); 124 static void audio1575_unmap_regs(audio1575_state_t *); 125 static void audio1575_dma_stop(audio1575_state_t *, boolean_t); 126 static void audio1575_pci_enable(audio1575_state_t *); 127 static void audio1575_pci_disable(audio1575_state_t *); 128 129 static void audio1575_destroy(audio1575_state_t *); 130 131 /* 132 * Global variables, but used only by this file. 133 */ 134 135 /* 136 * DDI Structures 137 */ 138 139 140 /* Device operations structure */ 141 static struct dev_ops audio1575_dev_ops = { 142 DEVO_REV, /* devo_rev */ 143 0, /* devo_refcnt */ 144 NULL, /* devo_getinfo */ 145 nulldev, /* devo_identify - obsolete */ 146 nulldev, /* devo_probe */ 147 audio1575_ddi_attach, /* devo_attach */ 148 audio1575_ddi_detach, /* devo_detach */ 149 nodev, /* devo_reset */ 150 NULL, /* devi_cb_ops */ 151 NULL, /* devo_bus_ops */ 152 NULL, /* devo_power */ 153 audio1575_ddi_quiesce, /* devo_quiesce */ 154 }; 155 156 /* Linkage structure for loadable drivers */ 157 static struct modldrv audio1575_modldrv = { 158 &mod_driverops, /* drv_modops */ 159 M1575_MOD_NAME, /* drv_linkinfo */ 160 &audio1575_dev_ops, /* drv_dev_ops */ 161 }; 162 163 /* Module linkage structure */ 164 static struct modlinkage audio1575_modlinkage = { 165 MODREV_1, /* ml_rev */ 166 (void *)&audio1575_modldrv, /* ml_linkage */ 167 NULL /* NULL terminates the list */ 168 }; 169 170 171 /* 172 * device access attributes for register mapping 173 */ 174 static struct ddi_device_acc_attr dev_attr = { 175 DDI_DEVICE_ATTR_V0, 176 DDI_STRUCTURE_LE_ACC, 177 DDI_STRICTORDER_ACC 178 }; 179 180 static struct ddi_device_acc_attr buf_attr = { 181 DDI_DEVICE_ATTR_V0, 182 DDI_NEVERSWAP_ACC, 183 DDI_STRICTORDER_ACC 184 }; 185 186 /* 187 * DMA attributes of buffer descriptor list 188 */ 189 static ddi_dma_attr_t bdlist_dma_attr = { 190 DMA_ATTR_V0, /* version */ 191 0x0000000000000000LL, /* dlim_addr_lo */ 192 0x00000000ffffffffLL, /* dlim_addr_hi */ 193 0x000000000000ffffLL, /* DMA counter register - 64 bits */ 194 0x0000000000000008LL, /* DMA address align must be 8-bytes */ 195 0x0000003c, /* 1 through 64 byte burst sizes */ 196 0x00000008, /* min xfer DMA size BDList entry */ 197 0x00000000000ffffLL, /* max xfer size, 64K */ 198 0x000000000001fffLL, /* seg, set to PAGESIZE */ 199 0x00000001, /* s/g list length, no s/g */ 200 0x00000008, /* granularity of device minxfer */ 201 0 /* DMA flags use virtual address */ 202 }; 203 204 /* 205 * DMA attributes of buffers to be used to receive/send audio data 206 */ 207 static ddi_dma_attr_t sample_buf_dma_attr = { 208 DMA_ATTR_V0, 209 0x0000000000000000LL, /* dlim_addr_lo */ 210 0x00000000ffffffffLL, /* dlim_addr_hi */ 211 0x000000000001fffeLL, /* DMA counter register - 16 bits */ 212 0x0000000000000004LL, /* DMA address align 2-byte boundary */ 213 0x0000003c, /* 1 through 60 byte burst sizes */ 214 0x00000004, /* min xfer DMA size BDList entry */ 215 0x000000000001ffffLL, /* max xfer size, 64K */ 216 0x000000000001ffffLL, /* seg, set to 64K */ 217 0x00000001, /* s/g list length, no s/g */ 218 0x00000004, /* granularity of device minxfer */ 219 0 /* DMA flags use virtual address */ 220 }; 221 222 /* 223 * _init() 224 * 225 * Description: 226 * Driver initialization, called when driver is first loaded. 227 * This is how access is initially given to all the static structures. 228 * 229 * Arguments: 230 * None 231 * 232 * Returns: 233 * mod_install() status, see mod_install(9f) 234 */ 235 int 236 _init(void) 237 { 238 int error; 239 240 audio_init_ops(&audio1575_dev_ops, M1575_NAME); 241 242 if ((error = mod_install(&audio1575_modlinkage)) != 0) { 243 audio_fini_ops(&audio1575_dev_ops); 244 } 245 246 return (error); 247 } 248 249 /* 250 * _fini() 251 * 252 * Description: 253 * Module de-initialization, called when the driver is to be unloaded. 254 * 255 * Arguments: 256 * None 257 * 258 * Returns: 259 * mod_remove() status, see mod_remove(9f) 260 */ 261 int 262 _fini(void) 263 { 264 int error; 265 266 if ((error = mod_remove(&audio1575_modlinkage)) != 0) { 267 return (error); 268 } 269 270 /* clean up ops */ 271 audio_fini_ops(&audio1575_dev_ops); 272 273 return (0); 274 } 275 276 /* 277 * _info() 278 * 279 * Description: 280 * Module information, returns information about the driver. 281 * 282 * Arguments: 283 * modinfo *modinfop Pointer to the opaque modinfo structure 284 * 285 * Returns: 286 * mod_info() status, see mod_info(9f) 287 */ 288 int 289 _info(struct modinfo *modinfop) 290 { 291 return (mod_info(&audio1575_modlinkage, modinfop)); 292 } 293 294 295 /* ******************* Driver Entry Points ********************************* */ 296 297 /* 298 * audio1575_ddi_attach() 299 * 300 * Description: 301 * Implements the DDI attach(9e) entry point. 302 * 303 * Arguments: 304 * dev_info_t *dip Pointer to the device's dev_info struct 305 * ddi_attach_cmd_t cmd Attach command 306 * 307 * Returns: 308 * DDI_SUCCESS The driver was initialized properly 309 * DDI_FAILURE The driver couldn't be initialized properly 310 */ 311 static int 312 audio1575_ddi_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) 313 { 314 switch (cmd) { 315 case DDI_ATTACH: 316 return (audio1575_attach(dip)); 317 318 case DDI_RESUME: 319 return (audio1575_resume(dip)); 320 } 321 return (DDI_FAILURE); 322 } 323 324 /* 325 * audio1575_ddi_detach() 326 * 327 * Description: 328 * Implements the detach(9e) entry point. 329 * 330 * Arguments: 331 * dev_info_t *dip Pointer to the device's dev_info struct 332 * ddi_detach_cmd_t cmd Detach command 333 * 334 * Returns: 335 * DDI_SUCCESS The driver was detached 336 * DDI_FAILURE The driver couldn't be detached 337 */ 338 static int 339 audio1575_ddi_detach(dev_info_t *dip, ddi_detach_cmd_t cmd) 340 { 341 switch (cmd) { 342 case DDI_DETACH: 343 return (audio1575_detach(dip)); 344 345 case DDI_SUSPEND: 346 return (audio1575_suspend(dip)); 347 } 348 return (DDI_FAILURE); 349 } 350 351 /* 352 * audio1575_ddi_quiesce() 353 * 354 * Description: 355 * Implements the quiesce(9e) entry point. 356 * 357 * Arguments: 358 * dev_info_t *dip Pointer to the device's dev_info struct 359 * 360 * Returns: 361 * DDI_SUCCESS The driver was quiesced 362 * DDI_FAILURE The driver couldn't be quiesced 363 */ 364 static int 365 audio1575_ddi_quiesce(dev_info_t *dip) 366 { 367 audio1575_state_t *statep; 368 369 if ((statep = ddi_get_driver_private(dip)) == NULL) 370 return (DDI_FAILURE); 371 372 audio1575_dma_stop(statep, B_TRUE); 373 return (DDI_SUCCESS); 374 } 375 376 377 /* 378 * audio1575_intr() 379 * 380 * Description: 381 * Interrupt service routine for both play and record. For play we 382 * get the next buffers worth of audio. For record we send it on to 383 * the mixer. 384 * 385 * Each of buffer descriptor has a field IOC(interrupt on completion) 386 * When both this and the IOC bit of correspondent dma control register 387 * is set, it means that the controller should issue an interrupt upon 388 * completion of this buffer. Note that in the clearing of the interrupts 389 * below that the PCM IN and PCM out interrupts ar cleared by their 390 * respective control registers and not by writing a '1' to the INTRSR 391 * the interrupt status register. Only CPRINTR,SPINTR,and GPIOINTR 392 * require a '1' written to the INTRSR register to clear those 393 * interrupts. See comments below. 394 * 395 * Arguments: 396 * caddr_t arg Pointer to the interrupting device's state 397 * structure 398 * 399 * Returns: 400 * DDI_INTR_CLAIMED Interrupt claimed and processed 401 * DDI_INTR_UNCLAIMED Interrupt not claimed, and thus ignored 402 */ 403 static uint_t 404 audio1575_intr(caddr_t arg, caddr_t dontcare) 405 { 406 audio1575_state_t *statep = (void *)arg; 407 uint32_t intrsr; 408 uint8_t index; 409 audio1575_port_t *consume = NULL; 410 audio1575_port_t *produce = NULL; 411 412 _NOTE(ARGUNUSED(dontcare)); 413 414 mutex_enter(&statep->lock); 415 416 intrsr = GET32(M1575_INTRSR_REG); 417 418 /* check if device is interrupting */ 419 if (intrsr == 0) { 420 if (statep->ksp) { 421 /* increment the spurious ino5 interrupt cnt */ 422 M1575_KIOP(statep)->intrs[KSTAT_INTR_SPURIOUS]++; 423 } 424 425 mutex_exit(&statep->lock); 426 return (DDI_INTR_UNCLAIMED); 427 } 428 429 /* update the kernel interrupt statistics */ 430 if (statep->ksp) { 431 M1575_KIOP(statep)->intrs[KSTAT_INTR_HARD]++; 432 } 433 434 /* 435 * The Uli M1575 generates an interrupt for each interrupt 436 * type. therefore we only process one interrupt type 437 * per invocation of the audio1575_intr() routine. 438 * WARNING: DO NOT attempt to optimize this by looping 439 * until the INTRSR register is clear as this will 440 * generate spurious ino5 interrupts. 441 */ 442 if (GET16(M1575_PCMISR_REG) & M1575_PCMISR_BCIS) { 443 /* Clear PCM IN interrupt */ 444 PUT16(M1575_PCMISR_REG, M1575_SR_CLR); 445 /* 446 * Note: This interrupt is not cleared by writing a '1' 447 * to the M1575_INTRSR_REG according to the M1575 Super I/O 448 * data sheet on page 189. 449 */ 450 451 /* update the LVI -- we just set it to the current value - 1 */ 452 index = GET8(M1575_PCMICIV_REG); 453 index = (index - 1) % M1575_BD_NUMS; 454 PUT8(M1575_PCMILVIV_REG, index); 455 produce = statep->ports[M1575_REC]; 456 457 } else if (GET16(M1575_PCMOSR_REG) & M1575_PCMOSR_BCIS) { 458 /* Clear PCM OUT interrupt */ 459 PUT16(M1575_PCMOSR_REG, M1575_SR_CLR); 460 /* 461 * Note: This interrupt is not cleared by writing a '1' 462 * to the M1575_INTRSR_REG according to the M1575 Super I/O 463 * data sheet on page 189. 464 */ 465 466 /* update the LVI -- we just set it to the current value - 1 */ 467 index = GET8(M1575_PCMOCIV_REG); 468 index = (index - 1) % M1575_BD_NUMS; 469 PUT8(M1575_PCMOLVIV_REG, index); 470 consume = statep->ports[M1575_PLAY]; 471 472 } else { 473 /* Clear other interrupts (there should not be any) */ 474 PUT32(M1575_INTRSR_REG, (intrsr & M1575_INTR_MASK)); 475 } 476 477 mutex_exit(&statep->lock); 478 479 if (produce) { 480 audio_engine_produce(produce->engine); 481 } 482 if (consume) { 483 audio_engine_consume(consume->engine); 484 } 485 486 return (DDI_INTR_CLAIMED); 487 } 488 489 /* 490 * audio1575_open() 491 * 492 * Description: 493 * Opens a DMA engine for use. 494 * 495 * Arguments: 496 * void *arg The DMA engine to set up 497 * int flag Open flags 498 * unsigned *fragfrp Receives number of frames per fragment 499 * unsigned *nfragsp Receives number of fragments 500 * caddr_t *bufp Receives kernel data buffer 501 * 502 * Returns: 503 * 0 on success 504 * errno on failure 505 */ 506 static int 507 audio1575_open(void *arg, int flag, 508 unsigned *fragfrp, unsigned *nfragsp, caddr_t *bufp) 509 { 510 audio1575_port_t *port = arg; 511 512 _NOTE(ARGUNUSED(flag)); 513 514 port->started = B_FALSE; 515 port->count = 0; 516 *fragfrp = port->fragfr; 517 *nfragsp = M1575_BD_NUMS; 518 *bufp = port->samp_kaddr; 519 520 mutex_enter(&port->statep->lock); 521 audio1575_reset_port(port); 522 mutex_exit(&port->statep->lock); 523 524 return (0); 525 } 526 527 528 /* 529 * audio1575_close() 530 * 531 * Description: 532 * Closes an audio DMA engine that was previously opened. Since 533 * nobody is using it, we take this opportunity to possibly power 534 * down the entire device. 535 * 536 * Arguments: 537 * void *arg The DMA engine to shut down 538 */ 539 static void 540 audio1575_close(void *arg) 541 { 542 audio1575_port_t *port = arg; 543 audio1575_state_t *statep = port->statep; 544 545 mutex_enter(&statep->lock); 546 audio1575_stop_port(port); 547 port->started = B_FALSE; 548 mutex_exit(&statep->lock); 549 } 550 551 /* 552 * audio1575_stop() 553 * 554 * Description: 555 * This is called by the framework to stop a port that is 556 * transferring data. 557 * 558 * Arguments: 559 * void *arg The DMA engine to stop 560 */ 561 static void 562 audio1575_stop(void *arg) 563 { 564 audio1575_port_t *port = arg; 565 audio1575_state_t *statep = port->statep; 566 567 mutex_enter(&statep->lock); 568 if (port->started) { 569 audio1575_stop_port(port); 570 } 571 port->started = B_FALSE; 572 mutex_exit(&statep->lock); 573 } 574 575 /* 576 * audio1575_start() 577 * 578 * Description: 579 * This is called by the framework to start a port transferring data. 580 * 581 * Arguments: 582 * void *arg The DMA engine to start 583 * 584 * Returns: 585 * 0 on success (never fails, errno if it did) 586 */ 587 static int 588 audio1575_start(void *arg) 589 { 590 audio1575_port_t *port = arg; 591 audio1575_state_t *statep = port->statep; 592 593 mutex_enter(&statep->lock); 594 if (!port->started) { 595 audio1575_start_port(port); 596 port->started = B_TRUE; 597 } 598 mutex_exit(&statep->lock); 599 return (0); 600 } 601 602 /* 603 * audio1575_format() 604 * 605 * Description: 606 * Called by the framework to query the format for the device. 607 * 608 * Arguments: 609 * void *arg The DMA engine to query 610 * 611 * Returns: 612 * AUDIO_FORMAT_S16_LE 613 */ 614 static int 615 audio1575_format(void *arg) 616 { 617 _NOTE(ARGUNUSED(arg)); 618 619 return (AUDIO_FORMAT_S16_LE); 620 } 621 622 /* 623 * audio1575_channels() 624 * 625 * Description: 626 * Called by the framework to query the channels for the device. 627 * 628 * Arguments: 629 * void *arg The DMA engine to query 630 * 631 * Returns: 632 * Number of channels for the device 633 */ 634 static int 635 audio1575_channels(void *arg) 636 { 637 audio1575_port_t *port = arg; 638 639 return (port->nchan); 640 } 641 642 /* 643 * audio1575_rate() 644 * 645 * Description: 646 * Called by the framework to query the sample rate for the device. 647 * 648 * Arguments: 649 * void *arg The DMA engine to query 650 * 651 * Returns: 652 * 48000 653 */ 654 static int 655 audio1575_rate(void *arg) 656 { 657 _NOTE(ARGUNUSED(arg)); 658 659 return (48000); 660 } 661 662 /* 663 * audio1575_count() 664 * 665 * Description: 666 * This is called by the framework to get the engine's frame counter 667 * 668 * Arguments: 669 * void *arg The DMA engine to query 670 * 671 * Returns: 672 * frame count for current engine 673 */ 674 static uint64_t 675 audio1575_count(void *arg) 676 { 677 audio1575_port_t *port = arg; 678 audio1575_state_t *statep = port->statep; 679 uint64_t val; 680 681 mutex_enter(&statep->lock); 682 audio1575_update_port(port); 683 val = port->count + port->picb; 684 mutex_exit(&statep->lock); 685 686 return (val); 687 } 688 689 /* 690 * audio1575_sync() 691 * 692 * Description: 693 * This is called by the framework to synchronize DMA caches. 694 * 695 * Arguments: 696 * void *arg The DMA engine to sync 697 */ 698 static void 699 audio1575_sync(void *arg, unsigned nframes) 700 { 701 audio1575_port_t *port = arg; 702 _NOTE(ARGUNUSED(nframes)); 703 704 (void) ddi_dma_sync(port->samp_dmah, 0, 0, port->sync_dir); 705 } 706 707 /* 708 * audio1575_qlen() 709 * 710 * Description: 711 * This is called by the framework to determine on-device queue length. 712 * 713 * Arguments: 714 * void *arg The DMA engine to query 715 * 716 * Returns: 717 * hardware queue length not reported by count (0 for this device) 718 */ 719 static size_t 720 audio1575_qlen(void *arg) 721 { 722 _NOTE(ARGUNUSED(arg)); 723 return (0); 724 } 725 726 727 /* 728 * audio1575_start_port() 729 * 730 * Description: 731 * This routine starts the DMA engine. 732 * 733 * Arguments: 734 * audio1575_port_t *port Port of DMA engine to start. 735 */ 736 static void 737 audio1575_start_port(audio1575_port_t *port) 738 { 739 audio1575_state_t *statep = port->statep; 740 741 ASSERT(mutex_owned(&statep->lock)); 742 743 /* if suspended, then do nothing else */ 744 if (statep->suspended) { 745 return; 746 } 747 748 if (port->num == M1575_REC) { 749 /* ULi says do fifo resets here */ 750 SET32(M1575_FIFOCR1_REG, M1575_FIFOCR1_PCMIRST); 751 CLR32(M1575_DMACR_REG, M1575_DMACR_PCMIPAUSE); 752 PUT8(M1575_PCMICR_REG, M1575_PCMICR_IOCE); 753 SET32(M1575_DMACR_REG, M1575_DMACR_PCMISTART); 754 } else { 755 CLR32(M1575_DMACR_REG, M1575_DMACR_PCMOPAUSE); 756 PUT8(M1575_PCMOCR_REG, M1575_PCMOCR_IOCE); 757 SET32(M1575_DMACR_REG, M1575_DMACR_PCMOSTART); 758 } 759 } 760 761 /* 762 * audio1575_stop_port() 763 * 764 * Description: 765 * This routine stops the DMA engine. 766 * 767 * Arguments: 768 * audio1575_port_t *port Port of DMA engine to stop. 769 */ 770 static void 771 audio1575_stop_port(audio1575_port_t *port) 772 { 773 audio1575_state_t *statep = port->statep; 774 775 ASSERT(mutex_owned(&statep->lock)); 776 777 /* if suspended, then do nothing else */ 778 if (statep->suspended) { 779 return; 780 } 781 782 if (port->num == M1575_REC) { 783 SET32(M1575_DMACR_REG, M1575_DMACR_PCMIPAUSE); 784 } else { 785 SET32(M1575_DMACR_REG, M1575_DMACR_PCMOPAUSE); 786 } 787 } 788 789 /* 790 * audio1575_reset_port() 791 * 792 * Description: 793 * This routine resets the DMA engine pareparing it for work. 794 * 795 * Arguments: 796 * audio1575_port_t *port Port of DMA engine to reset. 797 */ 798 static void 799 audio1575_reset_port(audio1575_port_t *port) 800 { 801 audio1575_state_t *statep = port->statep; 802 803 ASSERT(mutex_owned(&statep->lock)); 804 805 port->civ = 0; 806 port->picb = 0; 807 808 if (statep->suspended) 809 return; 810 811 if (port->num == M1575_REC) { 812 /* Uli FIFO madness ... */ 813 SET32(M1575_FIFOCR1_REG, M1575_FIFOCR1_PCMIRST); 814 SET32(M1575_DMACR_REG, M1575_DMACR_PCMIPAUSE); 815 816 PUT8(M1575_PCMICR_REG, 0); 817 PUT8(M1575_PCMICR_REG, M1575_CR_RR | M1575_CR_IOCE); 818 819 PUT32(M1575_PCMIBDBAR_REG, port->bdl_paddr); 820 PUT8(M1575_PCMILVIV_REG, M1575_BD_NUMS - 1); 821 822 CLR32(M1575_DMACR_REG, M1575_DMACR_PCMIPAUSE); 823 824 } else { 825 826 uint32_t scr; 827 828 /* Uli FIFO madness ... */ 829 SET32(M1575_FIFOCR1_REG, M1575_FIFOCR1_PCMORST); 830 SET32(M1575_DMACR_REG, M1575_DMACR_PCMOPAUSE); 831 832 /* configure the number of channels properly */ 833 scr = GET32(M1575_SCR_REG); 834 scr &= ~(M1575_SCR_6CHL_MASK | M1575_SCR_CHAMOD_MASK); 835 scr |= M1575_SCR_6CHL_2; /* select our proper ordering */ 836 switch (port->nchan) { 837 case 2: 838 scr |= M1575_SCR_CHAMOD_2; 839 break; 840 case 4: 841 scr |= M1575_SCR_CHAMOD_4; 842 break; 843 case 6: 844 scr |= M1575_SCR_CHAMOD_6; 845 break; 846 } 847 PUT32(M1575_SCR_REG, scr); 848 849 PUT8(M1575_PCMOCR_REG, 0); 850 PUT8(M1575_PCMOCR_REG, M1575_CR_RR | M1575_CR_IOCE); 851 852 PUT32(M1575_PCMOBDBAR_REG, port->bdl_paddr); 853 PUT8(M1575_PCMOLVIV_REG, M1575_BD_NUMS - 1); 854 855 CLR32(M1575_DMACR_REG, M1575_DMACR_PCMOPAUSE); 856 } 857 } 858 859 /* 860 * audio1575_update_port() 861 * 862 * Description: 863 * This routine updates the ports frame counter from hardware, and 864 * gracefully handles wraps. 865 * 866 * Arguments: 867 * audio1575_port_t *port The port to update. 868 */ 869 static void 870 audio1575_update_port(audio1575_port_t *port) 871 { 872 audio1575_state_t *statep = port->statep; 873 uint8_t civ; 874 uint16_t picb; 875 unsigned n; 876 int civoff; 877 int picoff; 878 879 if (port->num == M1575_REC) { 880 civoff = M1575_PCMICIV_REG; 881 picoff = M1575_PCMIPICB_REG; 882 } else { 883 civoff = M1575_PCMOCIV_REG; 884 picoff = M1575_PCMOPICB_REG; 885 } 886 887 if (statep->suspended) { 888 civ = 0; 889 picb = 0; 890 } else { 891 /* 892 * We read the position counters, but we're careful to avoid 893 * the situation where the position counter resets at the end 894 * of a buffer. 895 */ 896 for (int i = 0; i < 2; i++) { 897 civ = GET8(civoff); 898 picb = GET16(picoff); 899 if (GET8(civoff) == civ) { 900 /* 901 * Chip did not start a new index, so 902 * the picb is valid. 903 */ 904 break; 905 } 906 } 907 if (civ >= port->civ) { 908 n = civ - port->civ; 909 } else { 910 n = civ + (M1575_BD_NUMS - port->civ); 911 } 912 port->count += (n * port->fragfr); 913 } 914 port->civ = civ; 915 port->picb = picb; 916 } 917 918 /* 919 * audio1575_attach() 920 * 921 * Description: 922 * Attach an instance of the audio1575 driver. This routine does the 923 * device dependent attach tasks. When it is completed, it registers 924 * with the audio framework. 925 * 926 * Arguments: 927 * dev_info_t *dip Pointer to the device's dev_info struct 928 * 929 * Returns: 930 * DDI_SUCCESS The driver was initialized properly 931 * DDI_FAILURE The driver couldn't be initialized properly 932 */ 933 static int 934 audio1575_attach(dev_info_t *dip) 935 { 936 audio1575_state_t *statep; 937 audio_dev_t *adev; 938 uint32_t devid; 939 const char *name; 940 const char *rev; 941 int maxch; 942 943 /* allocate the soft state structure */ 944 statep = kmem_zalloc(sizeof (*statep), KM_SLEEP); 945 ddi_set_driver_private(dip, statep); 946 statep->dip = dip; 947 948 /* 949 * We want the micboost enabled by default as well. 950 */ 951 (void) ddi_prop_update_int(DDI_DEV_T_NONE, dip, AC97_PROP_MICBOOST, 1); 952 953 /* allocate common audio dev structure */ 954 adev = audio_dev_alloc(dip, 0); 955 if (adev == NULL) { 956 audio_dev_warn(NULL, "unable to allocate audio dev"); 957 goto error; 958 } 959 statep->adev = adev; 960 961 /* map in the audio registers */ 962 if (audio1575_map_regs(statep) != DDI_SUCCESS) { 963 audio_dev_warn(adev, "couldn't map registers"); 964 goto error; 965 } 966 967 if (audio1575_setup_intr(statep) != DDI_SUCCESS) { 968 /* message already noted */ 969 goto error; 970 } 971 972 /* Enable PCI I/O and Memory Spaces */ 973 audio1575_pci_enable(statep); 974 975 devid = (pci_config_get16(statep->pcih, PCI_CONF_VENID) << 16) | 976 pci_config_get16(statep->pcih, PCI_CONF_DEVID); 977 switch (devid) { 978 case 0x10b95455: 979 name = "Uli M1575 AC'97"; 980 rev = "M5455"; 981 break; 982 default: 983 name = "Uli AC'97"; 984 rev = "Unknown"; 985 break; 986 } 987 /* set device information -- this should check PCI config space */ 988 audio_dev_set_description(adev, name); 989 audio_dev_set_version(adev, rev); 990 991 statep->ac97 = ac97_alloc(dip, audio1575_read_ac97, 992 audio1575_write_ac97, statep); 993 ASSERT(statep->ac97 != NULL); 994 995 /* 996 * Override "max-channels" property to prevent configuration 997 * of 4 or 6 (or possibly even 8!) channel audio. The default 998 * is to support as many channels as the hardware can do. 999 */ 1000 maxch = ddi_prop_get_int(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS, 1001 "max-channels", ac97_num_channels(statep->ac97)); 1002 if (maxch < 2) { 1003 maxch = 2; 1004 } 1005 1006 statep->maxch = min(maxch, 6) & ~1; 1007 1008 /* allocate port structures */ 1009 if ((audio1575_alloc_port(statep, M1575_PLAY, statep->maxch) != 1010 DDI_SUCCESS) || 1011 (audio1575_alloc_port(statep, M1575_REC, 2) != DDI_SUCCESS)) { 1012 goto error; 1013 } 1014 1015 if (audio1575_chip_init(statep) != DDI_SUCCESS) { 1016 audio_dev_warn(adev, "failed to init chip"); 1017 goto error; 1018 } 1019 1020 if (ac97_init(statep->ac97, adev) != DDI_SUCCESS) { 1021 audio_dev_warn(adev, "ac'97 initialization failed"); 1022 goto error; 1023 } 1024 1025 /* set up kernel statistics */ 1026 if ((statep->ksp = kstat_create(M1575_NAME, 1027 ddi_get_instance(dip), M1575_NAME, "controller", 1028 KSTAT_TYPE_INTR, 1, KSTAT_FLAG_PERSISTENT)) != NULL) { 1029 kstat_install(statep->ksp); 1030 } 1031 1032 /* Enable PCI Interrupts */ 1033 pci_config_put8(statep->pcih, M1575_PCIMISC_REG, M1575_PCIMISC_INTENB); 1034 1035 /* enable audio interrupts */ 1036 if (ddi_intr_enable(statep->ih) != DDI_SUCCESS) { 1037 audio_dev_warn(adev, "ddi_intr_enable() failure"); 1038 goto error; 1039 } 1040 1041 /* register with the framework */ 1042 if (audio_dev_register(adev) != DDI_SUCCESS) { 1043 audio_dev_warn(adev, "unable to register with framework"); 1044 goto error; 1045 } 1046 1047 /* everything worked out, so report the device */ 1048 ddi_report_dev(dip); 1049 1050 return (DDI_SUCCESS); 1051 1052 error: 1053 audio1575_destroy(statep); 1054 return (DDI_FAILURE); 1055 } 1056 1057 /* 1058 * audio1575_detach() 1059 * 1060 * Description: 1061 * Detach an instance of the audio1575 driver. 1062 * 1063 * Arguments: 1064 * dev_info_t *dip Pointer to the device's dev_info struct 1065 * 1066 * Returns: 1067 * DDI_SUCCESS The driver was detached 1068 * DDI_FAILURE The driver couldn't be detached 1069 */ 1070 static int 1071 audio1575_detach(dev_info_t *dip) 1072 { 1073 audio1575_state_t *statep; 1074 1075 statep = ddi_get_driver_private(dip); 1076 1077 if (audio_dev_unregister(statep->adev) != DDI_SUCCESS) { 1078 return (DDI_FAILURE); 1079 } 1080 1081 audio1575_destroy(statep); 1082 return (DDI_SUCCESS); 1083 } 1084 1085 /* *********************** Local Routines *************************** */ 1086 1087 /* 1088 * audio1575_setup_intr() 1089 * 1090 * Description: 1091 * This routine initializes the audio driver's interrupt handle and 1092 * mutex. 1093 * 1094 * Arguments: 1095 * audio1575_state_t *state The device's state structure 1096 * 1097 * Returns: 1098 * DDI_SUCCESS Interrupt handle & mutex initialized 1099 * DDI_FAILURE Interrupt handle & mutex not initialized 1100 */ 1101 int 1102 audio1575_setup_intr(audio1575_state_t *statep) 1103 { 1104 audio_dev_t *adev; 1105 dev_info_t *dip; 1106 uint_t ipri; 1107 int actual; 1108 int rv; 1109 int itype; 1110 int count; 1111 ddi_intr_handle_t ih = NULL; 1112 1113 dip = statep->dip; 1114 adev = statep->adev; 1115 1116 /* get supported interrupt types */ 1117 rv = ddi_intr_get_supported_types(dip, &itype); 1118 if ((rv != DDI_SUCCESS) || (!(itype & DDI_INTR_TYPE_FIXED))) { 1119 audio_dev_warn(adev, "Fixed type interrupts not supported"); 1120 return (DDI_FAILURE); 1121 } 1122 1123 /* make sure we only have one fixed type interrupt */ 1124 rv = ddi_intr_get_nintrs(dip, DDI_INTR_TYPE_FIXED, &count); 1125 if ((rv != DDI_SUCCESS) || (count != 1)) { 1126 audio_dev_warn(adev, "No fixed interrupts"); 1127 return (DDI_FAILURE); 1128 } 1129 1130 rv = ddi_intr_alloc(statep->dip, &ih, DDI_INTR_TYPE_FIXED, 1131 0, 1, &actual, DDI_INTR_ALLOC_STRICT); 1132 if ((rv != DDI_SUCCESS) || (actual != 1)) { 1133 audio_dev_warn(adev, "Can't alloc interrupt handle"); 1134 return (DDI_FAILURE); 1135 } 1136 1137 /* test for a high level interrupt */ 1138 if (ddi_intr_get_pri(ih, &ipri) != DDI_SUCCESS) { 1139 audio_dev_warn(adev, "Can't get interrupt priority"); 1140 (void) ddi_intr_free(ih); 1141 return (DDI_FAILURE); 1142 } 1143 if (ipri >= ddi_intr_get_hilevel_pri()) { 1144 audio_dev_warn(adev, "Unsupported high level interrupt"); 1145 (void) ddi_intr_free(ih); 1146 return (DDI_FAILURE); 1147 } 1148 1149 if (ddi_intr_add_handler(ih, audio1575_intr, statep, NULL) != 1150 DDI_SUCCESS) { 1151 audio_dev_warn(adev, "Can't add interrupt handler"); 1152 (void) ddi_intr_free(ih); 1153 return (DDI_FAILURE); 1154 } 1155 1156 statep->ih = ih; 1157 mutex_init(&statep->lock, NULL, MUTEX_DRIVER, DDI_INTR_PRI(ipri)); 1158 mutex_init(&statep->ac_lock, NULL, MUTEX_DRIVER, DDI_INTR_PRI(ipri)); 1159 1160 return (DDI_SUCCESS); 1161 } 1162 1163 /* 1164 * audio1575_alloc_port() 1165 * 1166 * Description: 1167 * This routine allocates the DMA handles and the memory for the 1168 * DMA engines to use. It also configures the BDL lists properly 1169 * for use. 1170 * 1171 * Arguments: 1172 * dev_info_t *dip Pointer to the device's devinfo 1173 * int num M1575_PLAY or M1575_REC 1174 * uint8_t nchan Number of channels (2 = stereo, 6 = 5.1, etc.) 1175 * 1176 * Returns: 1177 * DDI_SUCCESS Registers successfully mapped 1178 * DDI_FAILURE Registers not successfully mapped 1179 */ 1180 static int 1181 audio1575_alloc_port(audio1575_state_t *statep, int num, uint8_t nchan) 1182 { 1183 ddi_dma_cookie_t cookie; 1184 uint_t count; 1185 int dir; 1186 unsigned caps; 1187 char *prop; 1188 audio_dev_t *adev; 1189 audio1575_port_t *port; 1190 uint32_t *kaddr; 1191 uint32_t paddr; 1192 int rc; 1193 dev_info_t *dip; 1194 1195 adev = statep->adev; 1196 dip = statep->dip; 1197 1198 port = kmem_zalloc(sizeof (*port), KM_SLEEP); 1199 statep->ports[num] = port; 1200 port->num = num; 1201 port->statep = statep; 1202 port->started = B_FALSE; 1203 port->nchan = nchan; 1204 1205 if (num == M1575_REC) { 1206 prop = "record-interrupts"; 1207 dir = DDI_DMA_READ; 1208 caps = ENGINE_INPUT_CAP; 1209 port->sync_dir = DDI_DMA_SYNC_FORKERNEL; 1210 } else { 1211 prop = "play-interrupts"; 1212 dir = DDI_DMA_WRITE; 1213 caps = ENGINE_OUTPUT_CAP; 1214 port->sync_dir = DDI_DMA_SYNC_FORDEV; 1215 } 1216 1217 port->intrs = ddi_prop_get_int(DDI_DEV_T_ANY, dip, 1218 DDI_PROP_DONTPASS, prop, M1575_INTS); 1219 1220 /* make sure the values are good */ 1221 if (port->intrs < M1575_MIN_INTS) { 1222 audio_dev_warn(adev, "%s too low, %d, resetting to %d", 1223 prop, port->intrs, M1575_INTS); 1224 port->intrs = M1575_INTS; 1225 } else if (port->intrs > M1575_MAX_INTS) { 1226 audio_dev_warn(adev, "%s too high, %d, resetting to %d", 1227 prop, port->intrs, M1575_INTS); 1228 port->intrs = M1575_INTS; 1229 } 1230 1231 /* 1232 * Figure out how much space we need. Sample rate is 48kHz, and 1233 * we need to store 32 chunks. (Note that this means that low 1234 * interrupt frequencies will require more RAM. We could probably 1235 * do some cleverness to use a shorter BD list.) 1236 */ 1237 port->fragfr = 48000 / port->intrs; 1238 port->fragfr = M1575_ROUNDUP(port->fragfr, M1575_MOD_SIZE); 1239 port->samp_size = port->fragfr * port->nchan * 2; 1240 port->samp_size *= M1575_BD_NUMS; 1241 1242 /* allocate dma handle */ 1243 rc = ddi_dma_alloc_handle(dip, &sample_buf_dma_attr, DDI_DMA_SLEEP, 1244 NULL, &port->samp_dmah); 1245 if (rc != DDI_SUCCESS) { 1246 audio_dev_warn(adev, "ddi_dma_alloc_handle failed: %d", rc); 1247 return (DDI_FAILURE); 1248 } 1249 /* allocate DMA buffer */ 1250 rc = ddi_dma_mem_alloc(port->samp_dmah, port->samp_size, &buf_attr, 1251 DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, NULL, &port->samp_kaddr, 1252 &port->samp_size, &port->samp_acch); 1253 if (rc == DDI_FAILURE) { 1254 audio_dev_warn(adev, "dma_mem_alloc failed"); 1255 return (DDI_FAILURE); 1256 } 1257 1258 /* bind DMA buffer */ 1259 rc = ddi_dma_addr_bind_handle(port->samp_dmah, NULL, 1260 port->samp_kaddr, port->samp_size, dir|DDI_DMA_CONSISTENT, 1261 DDI_DMA_SLEEP, NULL, &cookie, &count); 1262 if ((rc != DDI_DMA_MAPPED) || (count != 1)) { 1263 audio_dev_warn(adev, 1264 "ddi_dma_addr_bind_handle failed: %d", rc); 1265 return (DDI_FAILURE); 1266 } 1267 port->samp_paddr = cookie.dmac_address; 1268 1269 /* 1270 * now, from here we allocate DMA memory for buffer descriptor list. 1271 * we allocate adjacent DMA memory for all DMA engines. 1272 */ 1273 rc = ddi_dma_alloc_handle(dip, &bdlist_dma_attr, DDI_DMA_SLEEP, 1274 NULL, &port->bdl_dmah); 1275 if (rc != DDI_SUCCESS) { 1276 audio_dev_warn(adev, "ddi_dma_alloc_handle(bdlist) failed"); 1277 return (DDI_FAILURE); 1278 } 1279 1280 /* 1281 * we allocate all buffer descriptors lists in continuous dma memory. 1282 */ 1283 port->bdl_size = sizeof (m1575_bd_entry_t) * M1575_BD_NUMS; 1284 rc = ddi_dma_mem_alloc(port->bdl_dmah, port->bdl_size, 1285 &dev_attr, DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, NULL, 1286 &port->bdl_kaddr, &port->bdl_size, &port->bdl_acch); 1287 if (rc != DDI_SUCCESS) { 1288 audio_dev_warn(adev, "ddi_dma_mem_alloc(bdlist) failed"); 1289 return (DDI_FAILURE); 1290 } 1291 1292 /* 1293 * Wire up the BD list. We do this *before* binding the BD list 1294 * so that we don't have to do an extra ddi_dma_sync. 1295 */ 1296 paddr = port->samp_paddr; 1297 kaddr = (void *)port->bdl_kaddr; 1298 for (int i = 0; i < M1575_BD_NUMS; i++) { 1299 1300 /* set base address of buffer */ 1301 ddi_put32(port->bdl_acch, kaddr, paddr); 1302 kaddr++; 1303 1304 /* set size in frames, and enable IOC interrupt */ 1305 ddi_put32(port->bdl_acch, kaddr, 1306 ((port->fragfr * port->nchan) | (1U << 31))); 1307 kaddr++; 1308 1309 paddr += (port->fragfr * port->nchan * 2); 1310 } 1311 1312 rc = ddi_dma_addr_bind_handle(port->bdl_dmah, NULL, port->bdl_kaddr, 1313 port->bdl_size, DDI_DMA_WRITE|DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, 1314 NULL, &cookie, &count); 1315 if ((rc != DDI_DMA_MAPPED) || (count != 1)) { 1316 audio_dev_warn(adev, "addr_bind_handle failed"); 1317 return (DDI_FAILURE); 1318 } 1319 port->bdl_paddr = cookie.dmac_address; 1320 1321 port->engine = audio_engine_alloc(&audio1575_engine_ops, caps); 1322 if (port->engine == NULL) { 1323 audio_dev_warn(adev, "audio_engine_alloc failed"); 1324 return (DDI_FAILURE); 1325 } 1326 1327 audio_engine_set_private(port->engine, port); 1328 audio_dev_add_engine(adev, port->engine); 1329 1330 return (DDI_SUCCESS); 1331 } 1332 1333 /* 1334 * audio1575_free_port() 1335 * 1336 * Description: 1337 * This routine unbinds the DMA cookies, frees the DMA buffers, 1338 * deallocates the DMA handles. 1339 * 1340 * Arguments: 1341 * audio810_port_t *port The port structure for a DMA engine. 1342 */ 1343 static void 1344 audio1575_free_port(audio1575_port_t *port) 1345 { 1346 if (port == NULL) 1347 return; 1348 1349 if (port->engine) { 1350 audio_dev_remove_engine(port->statep->adev, port->engine); 1351 audio_engine_free(port->engine); 1352 } 1353 if (port->bdl_paddr) { 1354 (void) ddi_dma_unbind_handle(port->bdl_dmah); 1355 } 1356 if (port->bdl_acch) { 1357 ddi_dma_mem_free(&port->bdl_acch); 1358 } 1359 if (port->bdl_dmah) { 1360 ddi_dma_free_handle(&port->bdl_dmah); 1361 } 1362 if (port->samp_paddr) { 1363 (void) ddi_dma_unbind_handle(port->samp_dmah); 1364 } 1365 if (port->samp_acch) { 1366 ddi_dma_mem_free(&port->samp_acch); 1367 } 1368 if (port->samp_dmah) { 1369 ddi_dma_free_handle(&port->samp_dmah); 1370 } 1371 kmem_free(port, sizeof (*port)); 1372 } 1373 1374 /* 1375 * audio1575_map_regs() 1376 * 1377 * Description: 1378 * The registers are mapped in. 1379 * 1380 * Arguments: 1381 * dev_info_t *dip Pointer to the device's devinfo 1382 * 1383 * Returns: 1384 * DDI_SUCCESS Registers successfully mapped 1385 * DDI_FAILURE Registers not successfully mapped 1386 */ 1387 static int 1388 audio1575_map_regs(audio1575_state_t *statep) 1389 { 1390 dev_info_t *dip = statep->dip; 1391 1392 /* Check for fault management capabilities */ 1393 if (DDI_FM_ACC_ERR_CAP(ddi_fm_capable(dip))) { 1394 dev_attr.devacc_attr_access = DDI_FLAGERR_ACC; 1395 } 1396 1397 /* map the M1575 Audio PCI Cfg Space */ 1398 if (pci_config_setup(dip, &statep->pcih) != DDI_SUCCESS) { 1399 audio_dev_warn(statep->adev, "PCI config map failure"); 1400 goto error; 1401 } 1402 1403 /* map the M1575 Audio registers in PCI IO Space */ 1404 if ((ddi_regs_map_setup(dip, M1575_AUDIO_IO_SPACE, &statep->regsp, 1405 0, 0, &dev_attr, &statep->regsh)) != DDI_SUCCESS) { 1406 audio_dev_warn(statep->adev, "Audio IO mapping failure"); 1407 goto error; 1408 } 1409 return (DDI_SUCCESS); 1410 1411 error: 1412 audio1575_unmap_regs(statep); 1413 1414 return (DDI_FAILURE); 1415 } 1416 1417 /* 1418 * audio1575_unmap_regs() 1419 * 1420 * Description: 1421 * This routine unmaps control registers. 1422 * 1423 * Arguments: 1424 * audio1575_state_t *state The device's state structure 1425 */ 1426 static void 1427 audio1575_unmap_regs(audio1575_state_t *statep) 1428 { 1429 if (statep->regsh) { 1430 ddi_regs_map_free(&statep->regsh); 1431 } 1432 1433 if (statep->pcih) { 1434 pci_config_teardown(&statep->pcih); 1435 } 1436 } 1437 1438 /* 1439 * audio1575_chip_init() 1440 * 1441 * Description: 1442 * This routine initializes the M1575 AC97 audio controller and the AC97 1443 * codec. The AC97 codec registers are programmed from codec_shadow[]. 1444 * If we are not doing a restore, we initialize codec_shadow[], otherwise 1445 * we use the current values of shadow. This routine expects that the 1446 * PCI IO and Memory spaces have been mapped and enabled already. 1447 * Arguments: 1448 * audio1575_state_t *state The device's state structure 1449 * restore from codec_shadow[] 1450 * Returns: 1451 * DDI_SUCCESS The hardware was initialized properly 1452 * DDI_FAILURE The hardware couldn't be initialized properly 1453 */ 1454 static int 1455 audio1575_chip_init(audio1575_state_t *statep) 1456 { 1457 uint32_t ssr; 1458 uint32_t rtsr; 1459 uint32_t intrsr; 1460 int i; 1461 int j; 1462 #ifdef __sparc 1463 uint8_t clk_detect; 1464 ddi_acc_handle_t pcih; 1465 #endif 1466 clock_t ticks; 1467 1468 /* 1469 * clear the interrupt control and status register 1470 * READ/WRITE/READ workaround required 1471 * for buggy hardware 1472 */ 1473 1474 PUT32(M1575_INTRCR_REG, 0); 1475 (void) GET32(M1575_INTRCR_REG); 1476 1477 intrsr = GET32(M1575_INTRSR_REG); 1478 PUT32(M1575_INTRSR_REG, (intrsr & M1575_INTR_MASK)); 1479 (void) GET32(M1575_INTRSR_REG); 1480 1481 ticks = drv_usectohz(M1575_LOOP_CTR); 1482 1483 /* 1484 * SADA only supports stereo, so we set the channel bits 1485 * to "00" to select 2 channels. 1486 * will also set the following: 1487 * 1488 * Disable double rate enable 1489 * no SPDIF output selected 1490 * 16 bit audio record mode 1491 * 16 bit pcm out mode 1492 * PCM Out 6 chan mode FL FR CEN BL BR LFE 1493 * PCM Out 2 channel mode (00) 1494 */ 1495 for (i = 0; i < M1575_LOOP_CTR; i++) { 1496 /* Reset the AC97 Codec and default to 2 channel 16 bit mode */ 1497 PUT32(M1575_SCR_REG, M1575_SCR_COLDRST); 1498 delay(ticks<<1); 1499 1500 /* Read the System Status Reg */ 1501 ssr = GET32(M1575_SSR_REG); 1502 1503 /* make sure and release the blocked reset bit */ 1504 if (ssr & M1575_SSR_RSTBLK) { 1505 SET32(M1575_INTFCR_REG, M1575_INTFCR_RSTREL); 1506 delay(ticks); 1507 1508 /* Read the System Status Reg */ 1509 ssr = GET32(M1575_SSR_REG); 1510 1511 /* make sure and release the blocked reset bit */ 1512 if (ssr & M1575_SSR_RSTBLK) { 1513 return (DDI_FAILURE); 1514 } 1515 1516 /* Reset the controller */ 1517 PUT32(M1575_SCR_REG, M1575_SCR_COLDRST); 1518 delay(ticks); 1519 } 1520 1521 /* according AC'97 spec, wait for codec reset */ 1522 for (j = 0; j < M1575_LOOP_CTR; j++) { 1523 if ((GET32(M1575_SCR_REG) & M1575_SCR_COLDRST) == 0) { 1524 break; 1525 } 1526 delay(ticks); 1527 } 1528 1529 /* codec reset failed */ 1530 if (j >= M1575_LOOP_CTR) { 1531 audio_dev_warn(statep->adev, 1532 "failure to reset codec"); 1533 return (DDI_FAILURE); 1534 } 1535 1536 /* 1537 * Wait for FACRDY First codec ready. The hardware can 1538 * provide the state of 1539 * codec ready bit on SDATA_IN[0] and as reflected in 1540 * the Recv Tag Slot Reg. 1541 */ 1542 rtsr = GET32(M1575_RTSR_REG); 1543 if (rtsr & M1575_RTSR_FACRDY) { 1544 break; 1545 } else { /* reset the status and wait for new status to set */ 1546 rtsr |= M1575_RTSR_FACRDY; 1547 PUT32(M1575_RTSR_REG, rtsr); 1548 drv_usecwait(10); 1549 } 1550 } 1551 1552 /* if we could not reset the AC97 codec then report failure */ 1553 if (i >= M1575_LOOP_CTR) { 1554 audio_dev_warn(statep->adev, 1555 "no codec ready signal received"); 1556 return (DDI_FAILURE); 1557 } 1558 1559 #ifdef __sparc 1560 /* Magic code from ULi to Turn on the AC_LINK clock */ 1561 pcih = statep->pcih; 1562 pci_config_put8(pcih, M1575_PCIACD_REG, 0); 1563 pci_config_put8(pcih, M1575_PCIACD_REG, 4); 1564 pci_config_put8(pcih, M1575_PCIACD_REG, 0); 1565 (void) pci_config_get8(pcih, M1575_PCIACD_REG); 1566 pci_config_put8(pcih, M1575_PCIACD_REG, 2); 1567 pci_config_put8(pcih, M1575_PCIACD_REG, 0); 1568 clk_detect = pci_config_get8(pcih, M1575_PCIACD_REG); 1569 1570 if (clk_detect != 1) { 1571 audio_dev_warn(statep->adev, "No AC97 Clock Detected"); 1572 return (DDI_FAILURE); 1573 } 1574 #endif 1575 1576 /* Magic code from Uli to Init FIFO1 and FIFO2 */ 1577 PUT32(M1575_FIFOCR1_REG, 0x81818181); 1578 PUT32(M1575_FIFOCR2_REG, 0x81818181); 1579 PUT32(M1575_FIFOCR3_REG, 0x81818181); 1580 1581 /* Make sure that PCM in and PCM out are enabled */ 1582 SET32(M1575_INTFCR_REG, (M1575_INTFCR_PCMIENB | M1575_INTFCR_PCMOENB)); 1583 1584 audio1575_dma_stop(statep, B_FALSE); 1585 1586 return (DDI_SUCCESS); 1587 } 1588 1589 /* 1590 * audio1575_dma_stop() 1591 * 1592 * Description: 1593 * This routine is used to put each DMA engine into the quiet state. 1594 * 1595 * Arguments: 1596 * audio1575_state_t *statep The device's state structure 1597 */ 1598 static void 1599 audio1575_dma_stop(audio1575_state_t *statep, boolean_t quiesce) 1600 { 1601 uint32_t intrsr; 1602 int i; 1603 1604 if (statep->regsh == NULL) { 1605 return; 1606 } 1607 1608 /* pause bus master (needed for the following reset register) */ 1609 for (i = 0; i < M1575_LOOP_CTR; i++) { 1610 1611 SET32(M1575_DMACR_REG, M1575_DMACR_PAUSE_ALL); 1612 if (GET32(M1575_DMACR_REG) & M1575_DMACR_PAUSE_ALL) { 1613 break; 1614 } 1615 drv_usecwait(10); 1616 } 1617 1618 if (i >= M1575_LOOP_CTR) { 1619 if (!quiesce) 1620 audio_dev_warn(statep->adev, "failed to stop DMA"); 1621 return; 1622 } 1623 1624 /* Pause bus master (needed for the following reset register) */ 1625 PUT8(M1575_PCMICR_REG, 0); 1626 PUT8(M1575_PCMOCR_REG, 0); 1627 PUT8(M1575_MICICR_REG, 0); 1628 PUT8(M1575_CSPOCR_REG, 0); 1629 PUT8(M1575_PCMI2CR_RR, 0); 1630 PUT8(M1575_MICI2CR_RR, 0); 1631 1632 /* Reset the bus master registers for all DMA engines */ 1633 PUT8(M1575_PCMICR_REG, M1575_PCMICR_RR); 1634 PUT8(M1575_PCMOCR_REG, M1575_PCMOCR_RR); 1635 PUT8(M1575_MICICR_REG, M1575_MICICR_RR); 1636 PUT8(M1575_CSPOCR_REG, M1575_CSPOCR_RR); 1637 PUT8(M1575_PCMI2CR_REG, M1575_PCMI2CR_RR); 1638 PUT8(M1575_MICI2CR_REG, M1575_MICI2CR_RR); 1639 1640 /* Reset FIFOS */ 1641 PUT32(M1575_FIFOCR1_REG, 0x81818181); 1642 PUT32(M1575_FIFOCR2_REG, 0x81818181); 1643 PUT32(M1575_FIFOCR3_REG, 0x81818181); 1644 1645 /* Clear Interrupts */ 1646 SET16(M1575_PCMISR_REG, M1575_SR_CLR); 1647 SET16(M1575_PCMOSR_REG, M1575_SR_CLR); 1648 SET16(M1575_MICISR_REG, M1575_SR_CLR); 1649 SET16(M1575_CSPOSR_REG, M1575_SR_CLR); 1650 SET16(M1575_PCMI2SR_REG, M1575_SR_CLR); 1651 SET16(M1575_MICI2SR_REG, M1575_SR_CLR); 1652 1653 /* 1654 * clear the interrupt control and status register 1655 * READ/WRITE/READ workaround required 1656 * for buggy hardware 1657 */ 1658 1659 PUT32(M1575_INTRCR_REG, 0); 1660 (void) GET32(M1575_INTRCR_REG); 1661 1662 intrsr = GET32(M1575_INTRSR_REG); 1663 PUT32(M1575_INTRSR_REG, (intrsr & M1575_INTR_MASK)); 1664 (void) GET32(M1575_INTRSR_REG); 1665 } 1666 1667 /* 1668 * audio1575_codec_sync() 1669 * 1670 * Description: 1671 * Serialize access to the AC97 audio mixer registers. 1672 * 1673 * Arguments: 1674 * audio1575_state_t *state The device's state structure 1675 * 1676 * Returns: 1677 * DDI_SUCCESS Ready for an I/O access to the codec 1678 * DDI_FAILURE An I/O access is currently in progress, can't 1679 * perform another I/O access. 1680 */ 1681 static int 1682 audio1575_codec_sync(audio1575_state_t *statep) 1683 { 1684 /* do the Uli Shuffle ... */ 1685 for (int i = 0; i < M1575_LOOP_CTR; i++) { 1686 /* Read the semaphore, and loop till we own it */ 1687 if ((GET32(M1575_CASR_REG) & 1) == 0) { 1688 for (int j = 0; j < M1575_LOOP_CTR; j++) { 1689 /* Wait for CWRSUCC 0x8 */ 1690 if (GET32(M1575_CSPSR_REG) & 1691 M1575_CSPSR_SUCC) { 1692 return (DDI_SUCCESS); 1693 } 1694 drv_usecwait(1); 1695 } 1696 } 1697 drv_usecwait(10); 1698 } 1699 1700 return (DDI_FAILURE); 1701 } 1702 1703 /* 1704 * audio1575_write_ac97() 1705 * 1706 * Description: 1707 * Set the specific AC97 Codec register. 1708 * 1709 * Arguments: 1710 * void *arg The device's state structure 1711 * uint8_t reg AC97 register number 1712 * uint16_t data The data want to be set 1713 */ 1714 static void 1715 audio1575_write_ac97(void *arg, uint8_t reg, uint16_t data) 1716 { 1717 audio1575_state_t *statep = arg; 1718 int i; 1719 1720 mutex_enter(&statep->ac_lock); 1721 1722 if (audio1575_codec_sync(statep) != DDI_SUCCESS) { 1723 mutex_exit(&statep->ac_lock); 1724 return; 1725 } 1726 1727 /* write the data to WRITE to the lo word of the CPR register */ 1728 PUT16(M1575_CPR_REG, data); 1729 1730 /* write the address to WRITE to the hi word of the CPR register */ 1731 PUT16(M1575_CPR_REG+2, reg); 1732 1733 /* wait until command is completed sucessfully */ 1734 for (i = 0; i < M1575_LOOP_CTR; i++) { 1735 /* Wait for Write Ready 0x01 */ 1736 if (GET32(M1575_CSPSR_REG) & M1575_CSPSR_WRRDY) { 1737 break; 1738 } 1739 drv_usecwait(1); 1740 } 1741 1742 mutex_exit(&statep->ac_lock); 1743 1744 if (i < M1575_LOOP_CTR) { 1745 (void) audio1575_read_ac97(statep, reg); 1746 } 1747 } 1748 1749 /* 1750 * audio1575_read_ac97() 1751 * 1752 * Description: 1753 * Get the specific AC97 Codec register. It also updates codec_shadow[] 1754 * with the register value. 1755 * 1756 * Arguments: 1757 * void *arg The device's state structure 1758 * uint8_t reg AC97 register number 1759 * 1760 * Returns: 1761 * Value of AC97 register. (0xffff in failure situations). 1762 */ 1763 static uint16_t 1764 audio1575_read_ac97(void *arg, uint8_t reg) 1765 { 1766 audio1575_state_t *statep = arg; 1767 uint16_t addr = 0; 1768 uint16_t data = 0xffff; 1769 int i; 1770 1771 mutex_enter(&statep->ac_lock); 1772 if ((audio1575_codec_sync(statep)) != DDI_SUCCESS) { 1773 mutex_exit(&statep->ac_lock); 1774 return (data); 1775 } 1776 1777 /* 1778 * at this point we have the CASR semaphore 1779 * and the codec is r/w ready 1780 * OR in the READ opcode into the address field 1781 */ 1782 1783 addr = (reg | M1575_CPR_READ); 1784 1785 /* write the address to READ to the hi word of the CPR register */ 1786 PUT16(M1575_CPR_REG+2, addr); 1787 1788 /* wait until command is completed sucessfully */ 1789 for (i = 0; i < M1575_LOOP_CTR; i++) { 1790 /* Wait for Read Ready 0x02 */ 1791 if (GET32(M1575_CSPSR_REG) & M1575_CSPSR_RDRDY) { 1792 break; 1793 } 1794 drv_usecwait(1); 1795 } 1796 1797 if (i < M1575_LOOP_CTR) { 1798 /* read back the data and address */ 1799 data = GET16(M1575_SPR_REG); 1800 addr = GET16(M1575_SPR_REG+2); 1801 if (addr != reg) { 1802 data = 0xffff; 1803 } 1804 } 1805 1806 mutex_exit(&statep->ac_lock); 1807 return (data); 1808 } 1809 1810 /* 1811 * audio1575_pci_enable() 1812 * 1813 * Description: 1814 * This routine Enables all PCI IO and MEMORY accesses 1815 * 1816 * Arguments: 1817 * audio1575_state_t *statep The device's state structure 1818 */ 1819 static void 1820 audio1575_pci_enable(audio1575_state_t *statep) 1821 { 1822 uint16_t pcics_reg; 1823 1824 pcics_reg = pci_config_get16(statep->pcih, PCI_CONF_COMM); 1825 pcics_reg |= (PCI_COMM_IO | PCI_COMM_MAE | PCI_COMM_ME); 1826 pci_config_put16(statep->pcih, PCI_CONF_COMM, pcics_reg); 1827 } 1828 1829 /* 1830 * audio1575_pci_disable() 1831 * 1832 * Description: 1833 * This routine Disables all PCI IO and MEMORY accesses 1834 * 1835 * Arguments: 1836 * audio1575_state_t *statep The device's state structure 1837 */ 1838 static void 1839 audio1575_pci_disable(audio1575_state_t *statep) 1840 { 1841 uint16_t pcics_reg; 1842 1843 if (statep->pcih == NULL) 1844 return; 1845 pcics_reg = pci_config_get16(statep->pcih, PCI_CONF_COMM); 1846 pcics_reg &= ~(PCI_COMM_IO | PCI_COMM_MAE | PCI_COMM_ME); 1847 pci_config_put16(statep->pcih, PCI_CONF_COMM, pcics_reg); 1848 } 1849 1850 /* 1851 * audio1575_resume() 1852 * 1853 * Description: 1854 * Resume operation of the device after sleeping or hibernating. 1855 * Note that this should never fail, even if hardware goes wonky, 1856 * because the current PM framework will panic if it does. 1857 * 1858 * Arguments: 1859 * dev_info_t *dip Pointer to the device's dev_info struct 1860 * 1861 * Returns: 1862 * DDI_SUCCESS The driver was resumed 1863 */ 1864 static int 1865 audio1575_resume(dev_info_t *dip) 1866 { 1867 audio1575_state_t *statep; 1868 audio_dev_t *adev; 1869 1870 /* we've already allocated the state structure so get ptr */ 1871 statep = ddi_get_driver_private(dip); 1872 adev = statep->adev; 1873 ASSERT(!mutex_owned(&statep->lock)); 1874 1875 if (audio1575_chip_init(statep) != DDI_SUCCESS) { 1876 /* 1877 * Note that PM gurus say we should return 1878 * success here. Failure of audio shouldn't 1879 * be considered FATAL to the system. The 1880 * upshot is that audio will not progress. 1881 */ 1882 audio_dev_warn(adev, "DDI_RESUME failed to init chip"); 1883 return (DDI_SUCCESS); 1884 } 1885 1886 /* allow ac97 operations again */ 1887 ac97_resume(statep->ac97); 1888 1889 mutex_enter(&statep->lock); 1890 1891 ASSERT(statep->suspended); 1892 statep->suspended = B_FALSE; 1893 1894 for (int i = 0; i < M1575_NUM_PORTS; i++) { 1895 1896 audio1575_port_t *port = statep->ports[i]; 1897 1898 if (port != NULL) { 1899 /* reset framework DMA engine buffer */ 1900 if (port->engine != NULL) { 1901 audio_engine_reset(port->engine); 1902 } 1903 1904 /* reset and initialize hardware ports */ 1905 audio1575_reset_port(port); 1906 if (port->started) { 1907 audio1575_start_port(port); 1908 } else { 1909 audio1575_stop_port(port); 1910 } 1911 } 1912 } 1913 mutex_exit(&statep->lock); 1914 1915 return (DDI_SUCCESS); 1916 } 1917 1918 /* 1919 * audio1575_suspend() 1920 * 1921 * Description: 1922 * Suspend an instance of the audio1575 driver. 1923 * 1924 * Arguments: 1925 * dev_info_t *dip Pointer to the device's dev_info struct 1926 * 1927 * Returns: 1928 * DDI_SUCCESS The driver was suspended 1929 */ 1930 static int 1931 audio1575_suspend(dev_info_t *dip) 1932 { 1933 audio1575_state_t *statep; 1934 1935 statep = ddi_get_driver_private(dip); 1936 1937 ac97_suspend(statep->ac97); 1938 1939 mutex_enter(&statep->lock); 1940 1941 statep->suspended = B_TRUE; 1942 1943 /* 1944 * stop all DMA operations 1945 */ 1946 audio1575_dma_stop(statep, B_FALSE); 1947 1948 mutex_exit(&statep->lock); 1949 1950 return (DDI_SUCCESS); 1951 } 1952 1953 /* 1954 * audio1575_destroy() 1955 * 1956 * Description: 1957 * This routine releases all resources held by the device instance, 1958 * as part of either detach or a failure in attach. 1959 * 1960 * Arguments: 1961 * audio1575_state_t *state The device soft state. 1962 * 1963 * Returns: 1964 * None 1965 */ 1966 void 1967 audio1575_destroy(audio1575_state_t *statep) 1968 { 1969 ddi_acc_handle_t pcih; 1970 1971 /* stop DMA engines */ 1972 audio1575_dma_stop(statep, B_FALSE); 1973 1974 if (statep->regsh != NULL) { 1975 /* reset the codec */ 1976 PUT32(M1575_SCR_REG, M1575_SCR_COLDRST); 1977 } 1978 1979 if ((pcih = statep->pcih) != NULL) { 1980 /* turn off the AC_LINK clock */ 1981 pci_config_put8(pcih, M1575_PCIACD_REG, 0); 1982 pci_config_put8(pcih, M1575_PCIACD_REG, 4); 1983 pci_config_put8(pcih, M1575_PCIACD_REG, 0); 1984 } 1985 1986 /* Disable PCI I/O and Memory Spaces */ 1987 audio1575_pci_disable(statep); 1988 1989 if (statep->ih != NULL) { 1990 (void) ddi_intr_disable(statep->ih); 1991 (void) ddi_intr_remove_handler(statep->ih); 1992 (void) ddi_intr_free(statep->ih); 1993 mutex_destroy(&statep->lock); 1994 mutex_destroy(&statep->ac_lock); 1995 } 1996 1997 if (statep->ksp != NULL) { 1998 kstat_delete(statep->ksp); 1999 } 2000 2001 audio1575_free_port(statep->ports[M1575_PLAY]); 2002 audio1575_free_port(statep->ports[M1575_REC]); 2003 2004 audio1575_unmap_regs(statep); 2005 2006 if (statep->ac97 != NULL) { 2007 ac97_free(statep->ac97); 2008 } 2009 2010 if (statep->adev != NULL) { 2011 audio_dev_free(statep->adev); 2012 } 2013 2014 kmem_free(statep, sizeof (*statep)); 2015 } 2016