Lines Matching refs:port

429 	audioixp_port_t	*port = arg;  in audioixp_open()  local
433 port->started = B_FALSE; in audioixp_open()
434 port->count = 0; in audioixp_open()
435 port->offset = 0; in audioixp_open()
436 *nframesp = port->nframes; in audioixp_open()
437 *bufp = port->samp_kaddr; in audioixp_open()
472 audioixp_port_t *port = arg; in audioixp_stop() local
473 audioixp_state_t *statep = port->statep; in audioixp_stop()
476 if (port->num == IXP_REC) { in audioixp_stop()
501 audioixp_port_t *port = arg; in audioixp_start() local
502 audioixp_state_t *statep = port->statep; in audioixp_start()
506 port->offset = 0; in audioixp_start()
508 if (port->num == IXP_REC) { in audioixp_start()
514 port->bdl_paddr | IXP_AUDIO_IN_DMA_LINK_P_EN); in audioixp_start()
534 if (port->nchan >= 4) { in audioixp_start()
538 if (port->nchan >= 6) { in audioixp_start()
549 port->bdl_paddr | IXP_AUDIO_OUT_DMA_LINK_P_EN); in audioixp_start()
592 audioixp_port_t *port = arg; in audioixp_channels() local
594 return (port->nchan); in audioixp_channels()
632 audioixp_port_t *port = arg; in audioixp_count() local
633 audioixp_state_t *statep = port->statep; in audioixp_count()
637 audioixp_update_port(port); in audioixp_count()
638 val = port->count; in audioixp_count()
656 audioixp_port_t *port = arg; in audioixp_sync() local
659 (void) ddi_dma_sync(port->samp_dmah, 0, 0, port->sync_dir); in audioixp_sync()
687 audioixp_port_t *port; in audioixp_alloc_port() local
696 port = kmem_zalloc(sizeof (*port), KM_SLEEP); in audioixp_alloc_port()
697 port->statep = statep; in audioixp_alloc_port()
698 port->started = B_FALSE; in audioixp_alloc_port()
699 port->num = num; in audioixp_alloc_port()
703 statep->rec_port = port; in audioixp_alloc_port()
706 port->sync_dir = DDI_DMA_SYNC_FORKERNEL; in audioixp_alloc_port()
707 port->nchan = 2; in audioixp_alloc_port()
710 statep->play_port = port; in audioixp_alloc_port()
713 port->sync_dir = DDI_DMA_SYNC_FORDEV; in audioixp_alloc_port()
729 port->nchan = ddi_prop_get_int(DDI_DEV_T_ANY, dip, 0, in audioixp_alloc_port()
731 port->nchan = min(ac97_num_channels(statep->ac97), in audioixp_alloc_port()
732 port->nchan); in audioixp_alloc_port()
733 port->nchan &= ~1; /* make sure its an even number */ in audioixp_alloc_port()
734 port->nchan = max(port->nchan, 2); in audioixp_alloc_port()
741 port->nframes = 4096; in audioixp_alloc_port()
742 port->fragfr = port->nframes / IXP_BD_NUMS; in audioixp_alloc_port()
743 port->fragsz = port->fragfr * port->nchan * 2; in audioixp_alloc_port()
744 port->samp_size = port->nframes * port->nchan * 2; in audioixp_alloc_port()
748 NULL, &port->samp_dmah); in audioixp_alloc_port()
754 rc = ddi_dma_mem_alloc(port->samp_dmah, port->samp_size, &buf_attr, in audioixp_alloc_port()
755 DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, NULL, &port->samp_kaddr, in audioixp_alloc_port()
756 &port->samp_size, &port->samp_acch); in audioixp_alloc_port()
763 rc = ddi_dma_addr_bind_handle(port->samp_dmah, NULL, in audioixp_alloc_port()
764 port->samp_kaddr, port->samp_size, dir|DDI_DMA_CONSISTENT, in audioixp_alloc_port()
771 port->samp_paddr = cookie.dmac_address; in audioixp_alloc_port()
778 NULL, &port->bdl_dmah); in audioixp_alloc_port()
787 port->bdl_size = sizeof (audioixp_bd_entry_t) * IXP_BD_NUMS; in audioixp_alloc_port()
788 rc = ddi_dma_mem_alloc(port->bdl_dmah, port->bdl_size, in audioixp_alloc_port()
790 &port->bdl_kaddr, &port->bdl_size, &port->bdl_acch); in audioixp_alloc_port()
796 rc = ddi_dma_addr_bind_handle(port->bdl_dmah, NULL, port->bdl_kaddr, in audioixp_alloc_port()
797 port->bdl_size, DDI_DMA_WRITE|DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, in audioixp_alloc_port()
803 port->bdl_paddr = cookie.dmac_address; in audioixp_alloc_port()
808 paddr = port->samp_paddr; in audioixp_alloc_port()
809 bdentry = (void *)port->bdl_kaddr; in audioixp_alloc_port()
814 ddi_put32(port->bdl_acch, &bdentry->buf_base, paddr); in audioixp_alloc_port()
815 ddi_put16(port->bdl_acch, &bdentry->status, 0); in audioixp_alloc_port()
816 ddi_put16(port->bdl_acch, &bdentry->buf_len, port->fragsz / 4); in audioixp_alloc_port()
817 ddi_put32(port->bdl_acch, &bdentry->next, port->bdl_paddr + in audioixp_alloc_port()
819 paddr += port->fragsz; in audioixp_alloc_port()
822 (void) ddi_dma_sync(port->bdl_dmah, 0, 0, DDI_DMA_SYNC_FORDEV); in audioixp_alloc_port()
824 port->engine = audio_engine_alloc(&audioixp_engine_ops, caps); in audioixp_alloc_port()
825 if (port->engine == NULL) { in audioixp_alloc_port()
830 audio_engine_set_private(port->engine, port); in audioixp_alloc_port()
831 audio_dev_add_engine(adev, port->engine); in audioixp_alloc_port()
847 audioixp_free_port(audioixp_port_t *port) in audioixp_free_port() argument
849 if (port == NULL) in audioixp_free_port()
852 if (port->engine) { in audioixp_free_port()
853 audio_dev_remove_engine(port->statep->adev, port->engine); in audioixp_free_port()
854 audio_engine_free(port->engine); in audioixp_free_port()
856 if (port->bdl_paddr) { in audioixp_free_port()
857 (void) ddi_dma_unbind_handle(port->bdl_dmah); in audioixp_free_port()
859 if (port->bdl_acch) { in audioixp_free_port()
860 ddi_dma_mem_free(&port->bdl_acch); in audioixp_free_port()
862 if (port->bdl_dmah) { in audioixp_free_port()
863 ddi_dma_free_handle(&port->bdl_dmah); in audioixp_free_port()
865 if (port->samp_paddr) { in audioixp_free_port()
866 (void) ddi_dma_unbind_handle(port->samp_dmah); in audioixp_free_port()
868 if (port->samp_acch) { in audioixp_free_port()
869 ddi_dma_mem_free(&port->samp_acch); in audioixp_free_port()
871 if (port->samp_dmah) { in audioixp_free_port()
872 ddi_dma_free_handle(&port->samp_dmah); in audioixp_free_port()
874 kmem_free(port, sizeof (*port)); in audioixp_free_port()
888 audioixp_update_port(audioixp_port_t *port) in audioixp_update_port() argument
890 audioixp_state_t *statep = port->statep; in audioixp_update_port()
897 if (port->num == IXP_REC) { in audioixp_update_port()
911 if ((paddr < port->samp_paddr) || in audioixp_update_port()
912 (paddr >= (port->samp_paddr + port->samp_size))) { in audioixp_update_port()
916 offset = paddr - port->samp_paddr; in audioixp_update_port()
918 if (offset >= port->offset) { in audioixp_update_port()
919 n = offset - port->offset; in audioixp_update_port()
921 n = offset + (port->samp_size - port->offset); in audioixp_update_port()
923 port->offset = offset; in audioixp_update_port()
924 port->count += (n / (port->nchan * sizeof (uint16_t))); in audioixp_update_port()