Lines Matching +full:4 +full:- +full:ch
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
64 #define NDXSCHANS 4 /* No of DXS channels */
73 #define VIA_BLK_ALIGN (~(VIA_BLK_MIN - 1))
149 ret += via->pch[i].active; in via_chan_active()
152 ret += via->rch[i].active; in via_chan_active()
165 dev = oidp->oid_arg1; in sysctl_via8233_spdif_enable()
167 snd_mtxlock(via->lock); in sysctl_via8233_spdif_enable()
169 snd_mtxunlock(via->lock); in sysctl_via8233_spdif_enable()
173 if (err || req->newptr == NULL) in sysctl_via8233_spdif_enable()
182 snd_mtxlock(via->lock); in sysctl_via8233_spdif_enable()
184 snd_mtxunlock(via->lock); in sysctl_via8233_spdif_enable()
196 dev = oidp->oid_arg1; in sysctl_via8233_dxs_src()
198 snd_mtxlock(via->lock); in sysctl_via8233_dxs_src()
199 val = via->dxs_src; in sysctl_via8233_dxs_src()
200 snd_mtxunlock(via->lock); in sysctl_via8233_dxs_src()
203 if (err || req->newptr == NULL) in sysctl_via8233_dxs_src()
208 snd_mtxlock(via->lock); in sysctl_via8233_dxs_src()
209 via->dxs_src = val; in sysctl_via8233_dxs_src()
210 snd_mtxunlock(via->lock); in sysctl_via8233_dxs_src()
222 dev = oidp->oid_arg1; in sysctl_via_polling()
226 snd_mtxlock(via->lock); in sysctl_via_polling()
227 val = via->polling; in sysctl_via_polling()
228 snd_mtxunlock(via->lock); in sysctl_via_polling()
231 if (err || req->newptr == NULL) in sysctl_via_polling()
236 snd_mtxlock(via->lock); in sysctl_via_polling()
237 if (val != via->polling) { in sysctl_via_polling()
241 via->polling = 0; in sysctl_via_polling()
243 via->polling = 1; in sysctl_via_polling()
245 snd_mtxunlock(via->lock); in sysctl_via_polling()
254 if not done before 7.0-RELEASE, this needs to be converted to in via_init_sysctls()
256 as discussed on multimedia@ in msg-id <861wujij2q.fsf@xps.des.no> */ in via_init_sysctls()
278 return (bus_space_read_1(via->st, via->sh, regno)); in via_rd()
280 return (bus_space_read_2(via->st, via->sh, regno)); in via_rd()
281 case 4: in via_rd()
282 return (bus_space_read_4(via->st, via->sh, regno)); in via_rd()
294 bus_space_write_1(via->st, via->sh, regno, data); in via_wr()
297 bus_space_write_2(via->st, via->sh, regno, data); in via_wr()
299 case 4: in via_wr()
300 bus_space_write_4(via->st, via->sh, regno, data); in via_wr()
305 /* -------------------------------------------------------------------- */
315 if ((via_rd(via, VIA_AC97_CONTROL, 4) & VIA_AC97_BUSY) == 0) in via_waitready_codec()
319 device_printf(via->dev, "%s: codec busy\n", __func__); in via_waitready_codec()
330 if (via_rd(via, VIA_AC97_CONTROL, 4) & VIA_AC97_CODEC00_VALID) in via_waitvalid_codec()
334 device_printf(via->dev, "%s: codec invalid\n", __func__); in via_waitvalid_codec()
344 return (-1); in via_write_codec()
348 VIA_AC97_DATA(val), 4); in via_write_codec()
359 return (-1); in via_read_codec()
362 VIA_AC97_READ | VIA_AC97_INDEX(reg), 4); in via_read_codec()
365 return (-1); in via_read_codec()
368 return (-1); in via_read_codec()
380 /* -------------------------------------------------------------------- */
383 via_buildsgdt(struct via_chinfo *ch) in via_buildsgdt() argument
388 phys_addr = sndbuf_getbufaddr(ch->buffer); in via_buildsgdt()
390 for (i = 0; i < ch->blkcnt; i++) { in via_buildsgdt()
391 flag = (i == ch->blkcnt - 1) ? VIA_DMAOP_EOL : VIA_DMAOP_FLAG; in via_buildsgdt()
392 ch->sgd_table[i].ptr = phys_addr + (i * ch->blksz); in via_buildsgdt()
393 ch->sgd_table[i].flags = flag | ch->blksz; in via_buildsgdt()
399 /* -------------------------------------------------------------------- */
405 struct via_chinfo *ch = data; in via8233wr_setformat() local
406 struct via_info *via = ch->parent; in via8233wr_setformat()
414 snd_mtxlock(via->lock); in via8233wr_setformat()
415 via_wr(via, VIA_WR0_FORMAT, f, 4); in via8233wr_setformat()
416 snd_mtxunlock(via->lock); in via8233wr_setformat()
424 struct via_chinfo *ch = data; in via8233dxs_setformat() local
425 struct via_info *via = ch->parent; in via8233dxs_setformat()
428 r = ch->rbase + VIA8233_RP_DXS_RATEFMT; in via8233dxs_setformat()
429 snd_mtxlock(via->lock); in via8233dxs_setformat()
430 v = via_rd(via, r, 4); in via8233dxs_setformat()
437 via_wr(via, r, v, 4); in via8233dxs_setformat()
438 snd_mtxunlock(via->lock); in via8233dxs_setformat()
446 struct via_chinfo *ch = data; in via8233msgd_setformat() local
447 struct via_info *via = ch->parent; in via8233msgd_setformat()
460 snd_mtxlock(via->lock); in via8233msgd_setformat()
461 via_wr(via, VIA_MC_SLOT_SELECT, s, 4); in via8233msgd_setformat()
463 snd_mtxunlock(via->lock); in via8233msgd_setformat()
468 /* -------------------------------------------------------------------- */
474 struct via_chinfo *ch = data; in via8233wr_setspeed() local
475 struct via_info *via = ch->parent; in via8233wr_setspeed()
477 if (via->codec_caps & AC97_EXTCAP_VRA) in via8233wr_setspeed()
478 return (ac97_setrate(via->codec, AC97_REGEXT_LADCRATE, speed)); in via8233wr_setspeed()
486 struct via_chinfo *ch = data; in via8233dxs_setspeed() local
487 struct via_info *via = ch->parent; in via8233dxs_setspeed()
490 r = ch->rbase + VIA8233_RP_DXS_RATEFMT; in via8233dxs_setspeed()
491 snd_mtxlock(via->lock); in via8233dxs_setspeed()
492 v = via_rd(via, r, 4) & ~VIA8233_DXS_RATEFMT_48K; in via8233dxs_setspeed()
497 via_wr(via, r, v, 4); in via8233dxs_setspeed()
498 snd_mtxunlock(via->lock); in via8233dxs_setspeed()
506 struct via_chinfo *ch = data; in via8233msgd_setspeed() local
507 struct via_info *via = ch->parent; in via8233msgd_setspeed()
509 if (via->codec_caps & AC97_EXTCAP_VRA) in via8233msgd_setspeed()
510 return (ac97_setrate(via->codec, AC97_REGEXT_FDACRATE, speed)); in via8233msgd_setspeed()
515 /* -------------------------------------------------------------------- */
521 struct via_chinfo *ch = data; in via8233wr_getcaps() local
522 struct via_info *via = ch->parent; in via8233wr_getcaps()
525 if (via->codec_caps & AC97_EXTCAP_VRA) in via8233wr_getcaps()
533 struct via_chinfo *ch = data; in via8233dxs_getcaps() local
534 struct via_info *via = ch->parent; in via8233dxs_getcaps()
542 if (via->dxs_src) in via8233dxs_getcaps()
550 struct via_chinfo *ch = data; in via8233msgd_getcaps() local
551 struct via_info *via = ch->parent; in via8233msgd_getcaps()
554 if (via->codec_caps & AC97_EXTCAP_VRA) in via8233msgd_getcaps()
559 /* -------------------------------------------------------------------- */
566 struct via_chinfo *ch = data; in via8233chan_setfragments() local
567 struct via_info *via = ch->parent; in via8233chan_setfragments()
571 if (blksz > (sndbuf_getmaxsize(ch->buffer) / VIA_SEGS_MIN)) in via8233chan_setfragments()
572 blksz = sndbuf_getmaxsize(ch->buffer) / VIA_SEGS_MIN; in via8233chan_setfragments()
580 while ((blksz * blkcnt) > sndbuf_getmaxsize(ch->buffer)) { in via8233chan_setfragments()
589 if ((sndbuf_getblksz(ch->buffer) != blksz || in via8233chan_setfragments()
590 sndbuf_getblkcnt(ch->buffer) != blkcnt) && in via8233chan_setfragments()
591 sndbuf_resize(ch->buffer, blkcnt, blksz) != 0) in via8233chan_setfragments()
592 device_printf(via->dev, "%s: failed blksz=%u blkcnt=%u\n", in via8233chan_setfragments()
595 ch->blksz = sndbuf_getblksz(ch->buffer); in via8233chan_setfragments()
596 ch->blkcnt = sndbuf_getblkcnt(ch->buffer); in via8233chan_setfragments()
604 struct via_chinfo *ch = data; in via8233chan_setblocksize() local
605 struct via_info *via = ch->parent; in via8233chan_setblocksize()
607 via8233chan_setfragments(obj, data, blksz, via->blkcnt); in via8233chan_setblocksize()
609 return (ch->blksz); in via8233chan_setblocksize()
615 struct via_chinfo *ch = data; in via8233chan_getptr() local
616 struct via_info *via = ch->parent; in via8233chan_getptr()
619 snd_mtxlock(via->lock); in via8233chan_getptr()
620 if (via->polling != 0) { in via8233chan_getptr()
621 ptr = ch->ptr; in via8233chan_getptr()
622 snd_mtxunlock(via->lock); in via8233chan_getptr()
624 v = via_rd(via, ch->rbase + VIA_RP_CURRENT_COUNT, 4); in via8233chan_getptr()
625 snd_mtxunlock(via->lock); in via8233chan_getptr()
628 ptr = (index + 1) * ch->blksz - count; in via8233chan_getptr()
629 ptr %= ch->blkcnt * ch->blksz; /* Wrap to available space */ in via8233chan_getptr()
636 via8233chan_reset(struct via_info *via, struct via_chinfo *ch) in via8233chan_reset() argument
638 via_wr(via, ch->rbase + VIA_RP_CONTROL, SGD_CONTROL_STOP, 1); in via8233chan_reset()
639 via_wr(via, ch->rbase + VIA_RP_CONTROL, 0x00, 1); in via8233chan_reset()
640 via_wr(via, ch->rbase + VIA_RP_STATUS, in via8233chan_reset()
644 /* -------------------------------------------------------------------- */
648 via8233chan_sgdinit(struct via_info *via, struct via_chinfo *ch, int chnum) in via8233chan_sgdinit() argument
650 ch->sgd_table = &via->sgd_table[chnum * VIA_SEGS_MAX]; in via8233chan_sgdinit()
651 ch->sgd_addr = via->sgd_addr + chnum * VIA_SEGS_MAX * in via8233chan_sgdinit()
660 struct via_chinfo *ch; in via8233wr_init() local
663 snd_mtxlock(via->lock); in via8233wr_init()
664 num = via->rec_num++; in via8233wr_init()
665 ch = &via->rch[num]; in via8233wr_init()
666 ch->parent = via; in via8233wr_init()
667 ch->channel = c; in via8233wr_init()
668 ch->buffer = b; in via8233wr_init()
669 ch->dir = dir; in via8233wr_init()
670 ch->blkcnt = via->blkcnt; in via8233wr_init()
671 ch->rbase = VIA_WR_BASE(num); in via8233wr_init()
672 via_wr(via, ch->rbase + VIA_WR_RP_SGD_FORMAT, WR_FIFO_ENABLE, 1); in via8233wr_init()
673 snd_mtxunlock(via->lock); in via8233wr_init()
675 if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0) in via8233wr_init()
678 snd_mtxlock(via->lock); in via8233wr_init()
679 via8233chan_sgdinit(via, ch, num); in via8233wr_init()
680 via8233chan_reset(via, ch); in via8233wr_init()
681 snd_mtxunlock(via->lock); in via8233wr_init()
683 return (ch); in via8233wr_init()
691 struct via_chinfo *ch; in via8233dxs_init() local
694 snd_mtxlock(via->lock); in via8233dxs_init()
695 num = via->play_num++; in via8233dxs_init()
696 ch = &via->pch[num]; in via8233dxs_init()
697 ch->parent = via; in via8233dxs_init()
698 ch->channel = c; in via8233dxs_init()
699 ch->buffer = b; in via8233dxs_init()
700 ch->dir = dir; in via8233dxs_init()
701 ch->blkcnt = via->blkcnt; in via8233dxs_init()
708 ch->rbase = VIA_DXS_BASE(NDXSCHANS - 1 - via->n_dxs_registered); in via8233dxs_init()
709 via->n_dxs_registered++; in via8233dxs_init()
710 snd_mtxunlock(via->lock); in via8233dxs_init()
712 if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0) in via8233dxs_init()
715 snd_mtxlock(via->lock); in via8233dxs_init()
716 via8233chan_sgdinit(via, ch, NWRCHANS + num); in via8233dxs_init()
717 via8233chan_reset(via, ch); in via8233dxs_init()
718 snd_mtxunlock(via->lock); in via8233dxs_init()
720 return (ch); in via8233dxs_init()
728 struct via_chinfo *ch; in via8233msgd_init() local
731 snd_mtxlock(via->lock); in via8233msgd_init()
732 num = via->play_num++; in via8233msgd_init()
733 ch = &via->pch[num]; in via8233msgd_init()
734 ch->parent = via; in via8233msgd_init()
735 ch->channel = c; in via8233msgd_init()
736 ch->buffer = b; in via8233msgd_init()
737 ch->dir = dir; in via8233msgd_init()
738 ch->rbase = VIA_MC_SGD_STATUS; in via8233msgd_init()
739 ch->blkcnt = via->blkcnt; in via8233msgd_init()
740 snd_mtxunlock(via->lock); in via8233msgd_init()
742 if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0) in via8233msgd_init()
745 snd_mtxlock(via->lock); in via8233msgd_init()
746 via8233chan_sgdinit(via, ch, NWRCHANS + num); in via8233msgd_init()
747 via8233chan_reset(via, ch); in via8233msgd_init()
748 snd_mtxunlock(via->lock); in via8233msgd_init()
750 return (ch); in via8233msgd_init()
754 via8233chan_mute(struct via_info *via, struct via_chinfo *ch, int muted) in via8233chan_mute() argument
756 if (BASE_IS_VIA_DXS_REG(ch->rbase)) { in via8233chan_mute()
759 via_wr(via, ch->rbase + VIA8233_RP_DXS_LVOL, muted, 1); in via8233chan_mute()
760 via_wr(via, ch->rbase + VIA8233_RP_DXS_RVOL, muted, 1); in via8233chan_mute()
761 r = via_rd(via, ch->rbase + VIA8233_RP_DXS_LVOL, 1) & in via8233chan_mute()
764 device_printf(via->dev, in via8233chan_mute()
766 "(dxs base 0x%02x).\n", __func__, ch->rbase); in via8233chan_mute()
771 via_poll_channel(struct via_chinfo *ch) in via_poll_channel() argument
778 if (ch == NULL || ch->channel == NULL || ch->active == 0) in via_poll_channel()
781 via = ch->parent; in via_poll_channel()
782 sz = ch->blksz * ch->blkcnt; in via_poll_channel()
783 v = via_rd(via, ch->rbase + VIA_RP_CURRENT_COUNT, 4); in via_poll_channel()
786 ptr = ((index + 1) * ch->blksz) - count; in via_poll_channel()
788 ptr &= ~(ch->blksz - 1); in via_poll_channel()
789 ch->ptr = ptr; in via_poll_channel()
790 delta = (sz + ptr - ch->prevptr) % sz; in via_poll_channel()
792 if (delta < ch->blksz) in via_poll_channel()
795 ch->prevptr = ptr; in via_poll_channel()
810 snd_mtxlock(via->lock); in via_poll_callback()
811 if (via->polling == 0 || via_chan_active(via) == 0) { in via_poll_callback()
812 snd_mtxunlock(via->lock); in via_poll_callback()
817 ptrigger |= (via_poll_channel(&via->pch[i]) != 0) ? in via_poll_callback()
821 rtrigger |= (via_poll_channel(&via->rch[i]) != 0) ? in via_poll_callback()
825 callout_reset(&via->poll_timer, 1/*via->poll_ticks*/, in via_poll_callback()
828 snd_mtxunlock(via->lock); in via_poll_callback()
832 chn_intr(via->pch[i].channel); in via_poll_callback()
836 chn_intr(via->rch[i].channel); in via_poll_callback()
843 struct via_chinfo *ch; in via_poll_ticks() local
849 ch = &via->pch[i]; in via_poll_ticks()
850 if (ch->channel == NULL || ch->active == 0) in via_poll_ticks()
852 pollticks = ((uint64_t)hz * ch->blksz) / in via_poll_ticks()
853 ((uint64_t)sndbuf_getalign(ch->buffer) * in via_poll_ticks()
854 sndbuf_getspd(ch->buffer)); in via_poll_ticks()
865 ch = &via->rch[i]; in via_poll_ticks()
866 if (ch->channel == NULL || ch->active == 0) in via_poll_ticks()
868 pollticks = ((uint64_t)hz * ch->blksz) / in via_poll_ticks()
869 ((uint64_t)sndbuf_getalign(ch->buffer) * in via_poll_ticks()
870 sndbuf_getspd(ch->buffer)); in via_poll_ticks()
886 struct via_chinfo *ch = data; in via8233chan_trigger() local
887 struct via_info *via = ch->parent; in via8233chan_trigger()
893 snd_mtxlock(via->lock); in via8233chan_trigger()
896 via_buildsgdt(ch); in via8233chan_trigger()
897 via8233chan_mute(via, ch, 0); in via8233chan_trigger()
898 via_wr(via, ch->rbase + VIA_RP_TABLE_PTR, ch->sgd_addr, 4); in via8233chan_trigger()
899 if (via->polling != 0) { in via8233chan_trigger()
900 ch->ptr = 0; in via8233chan_trigger()
901 ch->prevptr = 0; in via8233chan_trigger()
902 pollticks = ((uint64_t)hz * ch->blksz) / in via8233chan_trigger()
903 ((uint64_t)sndbuf_getalign(ch->buffer) * in via8233chan_trigger()
904 sndbuf_getspd(ch->buffer)); in via8233chan_trigger()
911 pollticks < via->poll_ticks) { in via8233chan_trigger()
918 "pollticks %d -> %d\n", in via8233chan_trigger()
919 __func__, via->poll_ticks, in via8233chan_trigger()
922 via->poll_ticks = pollticks; in via8233chan_trigger()
923 callout_reset(&via->poll_timer, 1, in via8233chan_trigger()
927 via_wr(via, ch->rbase + VIA_RP_CONTROL, in via8233chan_trigger()
929 ((via->polling == 0) ? in via8233chan_trigger()
931 ch->active = 1; in via8233chan_trigger()
935 via_wr(via, ch->rbase + VIA_RP_CONTROL, SGD_CONTROL_STOP, 1); in via8233chan_trigger()
936 via8233chan_mute(via, ch, 1); in via8233chan_trigger()
937 via8233chan_reset(via, ch); in via8233chan_trigger()
938 ch->active = 0; in via8233chan_trigger()
939 if (via->polling != 0) { in via8233chan_trigger()
941 callout_stop(&via->poll_timer); in via8233chan_trigger()
942 via->poll_ticks = 1; in via8233chan_trigger()
945 if (pollticks > via->poll_ticks) { in via8233chan_trigger()
948 "%d -> %d\n", in via8233chan_trigger()
949 __func__, via->poll_ticks, in via8233chan_trigger()
951 via->poll_ticks = pollticks; in via8233chan_trigger()
952 callout_reset(&via->poll_timer, in via8233chan_trigger()
962 snd_mtxunlock(via->lock); in via8233chan_trigger()
1005 /* -------------------------------------------------------------------- */
1014 snd_mtxlock(via->lock); in via_intr()
1015 if (via->polling != 0) { in via_intr()
1016 snd_mtxunlock(via->lock); in via_intr()
1021 if (via->pch[i].channel == NULL || via->pch[i].active == 0) in via_intr()
1023 reg = via->pch[i].rbase + VIA_RP_STATUS; in via_intr()
1026 if (via->dma_eol_wake && ((stat & SGD_STATUS_EOL) || in via_intr()
1028 via_wr(via, via->pch[i].rbase + VIA_RP_CONTROL, in via_intr()
1037 if (via->rch[i].channel == NULL || via->rch[i].active == 0) in via_intr()
1039 reg = via->rch[i].rbase + VIA_RP_STATUS; in via_intr()
1042 if (via->dma_eol_wake && ((stat & SGD_STATUS_EOL) || in via_intr()
1044 via_wr(via, via->rch[i].rbase + VIA_RP_CONTROL, in via_intr()
1051 snd_mtxunlock(via->lock); in via_intr()
1055 chn_intr(via->pch[i].channel); in via_intr()
1059 chn_intr(via->rch[i].channel); in via_intr()
1105 via->sgd_addr = bds->ds_addr; in dma_cb()
1173 via->lock = snd_mtxcreate(device_get_nameunit(dev), in via_attach()
1175 via->dev = dev; in via_attach()
1177 callout_init(&via->poll_timer, 1); in via_attach()
1178 via->poll_ticks = 1; in via_attach()
1182 via->polling = 1; in via_attach()
1184 via->polling = 0; in via_attach()
1189 via->regid = PCIR_BAR(0); in via_attach()
1190 via->reg = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &via->regid, in via_attach()
1192 if (!via->reg) { in via_attach()
1196 via->st = rman_get_bustag(via->reg); in via_attach()
1197 via->sh = rman_get_bushandle(via->reg); in via_attach()
1199 via->irqid = 0; in via_attach()
1200 via->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &via->irqid, in via_attach()
1202 if (!via->irq || in via_attach()
1203 snd_setup_intr(dev, via->irq, INTR_MPSAFE, in via_attach()
1204 via_intr, via, &via->ih)) { in via_attach()
1209 via->bufsz = pcm_getbuffersize(dev, 4096, VIA_DEFAULT_BUFSZ, 65536); in via_attach()
1215 via->blkcnt = via->bufsz / i; in via_attach()
1217 while (via->blkcnt >> i) in via_attach()
1219 via->blkcnt = 1 << (i - 1); in via_attach()
1220 if (via->blkcnt < VIA_SEGS_MIN) in via_attach()
1221 via->blkcnt = VIA_SEGS_MIN; in via_attach()
1222 else if (via->blkcnt > VIA_SEGS_MAX) in via_attach()
1223 via->blkcnt = VIA_SEGS_MAX; in via_attach()
1226 via->blkcnt = VIA_SEGS_DEFAULT; in via_attach()
1235 via->dma_eol_wake = 1; in via_attach()
1237 via->dma_eol_wake = 0; in via_attach()
1245 * that it plays at half-speed. Do not see this behaviour in via_attach()
1285 via->dxs_src = (via_dxs_src > 0) ? 1 : 0; in via_attach()
1287 via->dxs_src = 0; in via_attach()
1297 /*maxsize*/via->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, in via_attach()
1299 /*lockarg*/NULL, &via->parent_dmat) != 0) { in via_attach()
1317 /*lockarg*/NULL, &via->sgd_dmat) != 0) { in via_attach()
1322 if (bus_dmamem_alloc(via->sgd_dmat, (void **)&via->sgd_table, in via_attach()
1323 BUS_DMA_NOWAIT, &via->sgd_dmamap) == -1) in via_attach()
1325 if (bus_dmamap_load(via->sgd_dmat, via->sgd_dmamap, via->sgd_table, in via_attach()
1332 via->codec = AC97_CREATE(dev, via, via_ac97); in via_attach()
1333 if (!via->codec) in via_attach()
1336 mixer_init(dev, ac97_getmixerclass(), via->codec); in via_attach()
1338 via->codec_caps = ac97_getextcaps(via->codec); in via_attach()
1341 if (via->codec_caps & in via_attach()
1343 uint16_t ext = ac97_getextmode(via->codec); in via_attach()
1344 ext |= (via->codec_caps & in via_attach()
1347 ac97_setextmode(via->codec, ext); in via_attach()
1351 rman_get_start(via->reg), rman_get_start(via->irq), in via_attach()
1365 (via_dxs_chnum > 0) ? "En" : "Dis", (via->dxs_src) ? "(SRC)" : "", in via_attach()
1373 if (via->codec) in via_attach()
1374 ac97_destroy(via->codec); in via_attach()
1375 if (via->reg) in via_attach()
1376 bus_release_resource(dev, SYS_RES_IOPORT, via->regid, via->reg); in via_attach()
1377 if (via->ih) in via_attach()
1378 bus_teardown_intr(dev, via->irq, via->ih); in via_attach()
1379 if (via->irq) in via_attach()
1380 bus_release_resource(dev, SYS_RES_IRQ, via->irqid, via->irq); in via_attach()
1381 if (via->parent_dmat) in via_attach()
1382 bus_dma_tag_destroy(via->parent_dmat); in via_attach()
1383 if (via->sgd_addr) in via_attach()
1384 bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap); in via_attach()
1385 if (via->sgd_table) in via_attach()
1386 bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap); in via_attach()
1387 if (via->sgd_dmat) in via_attach()
1388 bus_dma_tag_destroy(via->sgd_dmat); in via_attach()
1389 if (via->lock) in via_attach()
1390 snd_mtxfree(via->lock); in via_attach()
1408 if (via != NULL && (via->play_num != 0 || via->rec_num != 0)) { in via_detach()
1409 snd_mtxlock(via->lock); in via_detach()
1410 via->polling = 0; in via_detach()
1411 callout_stop(&via->poll_timer); in via_detach()
1412 snd_mtxunlock(via->lock); in via_detach()
1413 callout_drain(&via->poll_timer); in via_detach()
1416 bus_release_resource(dev, SYS_RES_IOPORT, via->regid, via->reg); in via_detach()
1417 bus_teardown_intr(dev, via->irq, via->ih); in via_detach()
1418 bus_release_resource(dev, SYS_RES_IRQ, via->irqid, via->irq); in via_detach()
1419 bus_dma_tag_destroy(via->parent_dmat); in via_detach()
1420 bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap); in via_detach()
1421 bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap); in via_detach()
1422 bus_dma_tag_destroy(via->sgd_dmat); in via_detach()
1423 snd_mtxfree(via->lock); in via_detach()