Lines Matching refs:dev

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