Lines Matching refs:dev

132 read_reg(p16x_dev_t *dev, int reg, int chn)
136 mutex_enter(&dev->mutex);
137 OUTL(dev, (reg << 16) | (chn & 0xffff), PTR); /* Pointer */
138 val = INL(dev, DR); /* Data */
139 mutex_exit(&dev->mutex);
145 write_reg(p16x_dev_t *dev, int reg, int chn, unsigned int value)
148 mutex_enter(&dev->mutex);
149 OUTL(dev, (reg << 16) | (chn & 0xffff), PTR); /* Pointer */
150 OUTL(dev, value, DR); /* Data */
151 mutex_exit(&dev->mutex);
155 set_reg_bits(p16x_dev_t *dev, int reg, int chn, unsigned int mask)
158 mutex_enter(&dev->mutex);
159 OUTL(dev, (reg << 16) | (chn & 0xffff), PTR); /* Pointer */
160 val = INL(dev, DR); /* Data */
162 OUTL(dev, val, DR); /* Data */
163 mutex_exit(&dev->mutex);
167 clear_reg_bits(p16x_dev_t *dev, int reg, int chn, unsigned int mask)
170 mutex_enter(&dev->mutex);
171 OUTL(dev, (reg << 16) | (chn & 0xffff), PTR); /* Pointer */
172 val = INL(dev, DR); /* Data */
174 OUTL(dev, val, DR); /* Data */
175 mutex_exit(&dev->mutex);
181 p16x_dev_t *dev = arg;
185 OUTB(dev, index, AC97A);
187 if (INB(dev, AC97A) & 0x80)
189 value = INW(dev, AC97D);
196 p16x_dev_t *dev = arg;
199 OUTB(dev, index, AC97A);
201 if (INB(dev, AC97A) & 0x80)
203 OUTW(dev, data, AC97D);
234 p16x_dev_t *dev = port->dev;
239 write_reg(dev, CRFA, 0, 0);
240 write_reg(dev, CRCAV, 0, 0);
243 set_reg_bits(dev, SA, 0, 0x100);
246 write_reg(dev, PTBA, i, 0);
247 write_reg(dev, PTBS, i, 0);
248 write_reg(dev, PTCA, i, 0);
249 write_reg(dev, PFEA, i, 0);
250 write_reg(dev, CPFA, i, 0);
251 write_reg(dev, CPCAV, i, 0);
255 set_reg_bits(dev, SA, 0, 0x7);
265 p16x_dev_t *dev = port->dev;
269 clear_reg_bits(dev, SA, 0, 0x100);
273 clear_reg_bits(dev, SA, 0, 0x7);
314 p16x_dev_t *dev = port->dev;
319 offset = read_reg(dev, CPFA, 0);
321 offset = read_reg(dev, CRFA, 0);
371 p16x_alloc_port(p16x_dev_t *dev, int num)
381 adev = dev->adev;
383 dev->port[num] = port;
384 port->dev = dev;
417 if (ddi_dma_alloc_handle(dev->dip, &dma_attr_buf, DDI_DMA_SLEEP, NULL,
451 p16x_destroy(p16x_dev_t *dev)
453 mutex_destroy(&dev->mutex);
456 p16x_port_t *port = dev->port[i];
460 audio_dev_remove_engine(dev->adev, port->engine);
475 if (dev->ac97 != NULL) {
476 ac97_free(dev->ac97);
478 if (dev->adev != NULL) {
479 audio_dev_free(dev->adev);
481 if (dev->regsh != NULL) {
482 ddi_regs_map_free(&dev->regsh);
484 if (dev->pcih != NULL) {
485 pci_config_teardown(&dev->pcih);
487 kmem_free(dev, sizeof (*dev));
491 p16x_hwinit(p16x_dev_t *dev)
499 write_reg(dev, PTBA, i, 0);
500 write_reg(dev, PTBS, i, 0);
501 write_reg(dev, PTCA, i, 0);
502 write_reg(dev, PFEA, i, 0);
503 write_reg(dev, CPFA, i, 0);
504 write_reg(dev, CPCAV, i, 0);
505 write_reg(dev, CRFA, i, 0);
506 write_reg(dev, CRCAV, i, 0);
508 write_reg(dev, SCS0, 0, 0x02108504);
509 write_reg(dev, SCS1, 0, 0x02108504);
510 write_reg(dev, SCS2, 0, 0x02108504);
513 write_reg(dev, SPC, 0, 0x00000700);
514 write_reg(dev, EA_aux, 0, 0x0001003f);
516 port = dev->port[P16X_REC];
518 write_reg(dev, RFBA, 0, port->buf_paddr);
519 write_reg(dev, RFBS, 0, (port->buf_size) << 16);
522 port = dev->port[P16X_PLAY];
525 write_reg(dev, PFBA, 0, paddr);
526 write_reg(dev, PFBS, 0, chunksz << 16);
528 write_reg(dev, PFBA, 1, paddr);
529 write_reg(dev, PFBS, 1, chunksz << 16);
531 write_reg(dev, PFBA, 2, paddr);
532 write_reg(dev, PFBS, 2, chunksz << 16);
534 OUTL(dev, 0x1080, GPIO); /* GPIO */
536 OUTL(dev, INTR_ALL, IP);
537 OUTL(dev, 0, IE);
538 OUTL(dev, 0x9, HC); /* Enable audio */
545 p16x_dev_t *dev;
548 dev = kmem_zalloc(sizeof (*dev), KM_SLEEP);
549 dev->dip = dip;
550 ddi_set_driver_private(dip, dev);
552 mutex_init(&dev->mutex, NULL, MUTEX_DRIVER, NULL);
554 if ((dev->adev = audio_dev_alloc(dip, 0)) == NULL) {
560 audio_dev_warn(dev->adev, "pci_config_setup failed");
563 dev->pcih = pcih;
569 audio_dev_warn(dev->adev, "Hardware not recognized "
570 "(vendor=%x, dev=%x)", vendor, device);
580 if ((ddi_regs_map_setup(dip, 1, &dev->base, 0, 0, &dev_attr,
581 &dev->regsh)) != DDI_SUCCESS) {
582 audio_dev_warn(dev->adev, "failed to map registers");
586 audio_dev_set_description(dev->adev, "Creative Sound Blaster Live!");
587 audio_dev_set_version(dev->adev, "SBO200");
589 if ((p16x_alloc_port(dev, P16X_PLAY) != DDI_SUCCESS) ||
590 (p16x_alloc_port(dev, P16X_REC) != DDI_SUCCESS)) {
594 p16x_hwinit(dev);
596 dev->ac97 = ac97_allocate(dev->adev, dip,
597 p16x_read_ac97, p16x_write_ac97, dev);
598 if (dev->ac97 == NULL) {
599 audio_dev_warn(dev->adev, "failed to allocate ac97 handle");
603 ac97_probe_controls(dev->ac97);
608 ctrl = ac97_control_find(dev->ac97, p16x_remove_ac97[i]);
614 ac97_register_controls(dev->ac97);
616 if (audio_dev_register(dev->adev) != DDI_SUCCESS) {
617 audio_dev_warn(dev->adev, "unable to register with framework");
626 p16x_destroy(dev);
633 p16x_dev_t *dev;
635 dev = ddi_get_driver_private(dip);
637 p16x_hwinit(dev);
639 ac97_reset(dev->ac97);
641 audio_dev_resume(dev->adev);
647 p16x_detach(p16x_dev_t *dev)
649 if (audio_dev_unregister(dev->adev) != DDI_SUCCESS)
652 p16x_destroy(dev);
657 p16x_suspend(p16x_dev_t *dev)
659 audio_dev_suspend(dev->adev);
741 p16x_dev_t *dev;
743 dev = ddi_get_driver_private(dip);
747 return (p16x_detach(dev));
750 return (p16x_suspend(dev));
760 p16x_dev_t *dev;
762 dev = ddi_get_driver_private(dip);
764 write_reg(dev, SA, 0, 0);
765 OUTL(dev, 0x01, HC);