Lines Matching defs:tr
145 tr_rd(struct tr_info *tr, int regno, int size)
149 return bus_space_read_1(tr->st, tr->sh, regno);
151 return bus_space_read_2(tr->st, tr->sh, regno);
153 return bus_space_read_4(tr->st, tr->sh, regno);
160 tr_wr(struct tr_info *tr, int regno, u_int32_t data, int size)
164 bus_space_write_1(tr->st, tr->sh, regno, data);
167 bus_space_write_2(tr->st, tr->sh, regno, data);
170 bus_space_write_4(tr->st, tr->sh, regno, data);
181 struct tr_info *tr = (struct tr_info *)devinfo;
184 switch (tr->type) {
190 if (tr->rev > 0x01)
212 snd_mtxlock(tr->lock);
213 if (tr->type == ALI_PCI_ID) {
217 j = tr_rd(tr, treg, 4);
219 chk1 = tr_rd(tr, 0xc8, 4);
220 chk2 = tr_rd(tr, 0xc8, 4);
223 chk2 = tr_rd(tr, 0xc8, 4);
226 if (tr->type != ALI_PCI_ID || i > 0) {
227 tr_wr(tr, treg, regno | trw, 4);
230 j=tr_rd(tr, treg, 4);
232 snd_mtxunlock(tr->lock);
240 struct tr_info *tr = (struct tr_info *)devinfo;
243 switch (tr->type) {
269 snd_mtxlock(tr->lock);
270 if (tr->type == ALI_PCI_ID) {
273 j = tr_rd(tr, treg, 4);
276 chk1 = tr_rd(tr, 0xc8, 4);
277 chk2 = tr_rd(tr, 0xc8, 4);
280 chk2 = tr_rd(tr, 0xc8, 4);
283 if (tr->type != ALI_PCI_ID || i > 0) {
285 j=tr_rd(tr, treg, 4);
286 if (tr->type == ALI_PCI_ID && tr->rev > 0x01)
288 tr_wr(tr, treg, (data << TR_CDC_DATA) | regno | trw, 4);
293 snd_mtxunlock(tr->lock);
312 struct tr_info *tr = ch->parent;
317 return tr_rd(tr, bank? TR_REG_ADDRINTB : TR_REG_ADDRINTA, 4) & (1 << chan);
324 struct tr_info *tr = ch->parent;
329 tr_wr(tr, bank? TR_REG_ADDRINTB : TR_REG_ADDRINTA, 1 << chan, 4);
335 struct tr_info *tr = ch->parent;
339 snd_mtxlock(tr->lock);
344 i = tr_rd(tr, reg, 4);
349 tr_wr(tr, reg, i, 4);
350 snd_mtxunlock(tr->lock);
358 struct tr_info *tr = ch->parent;
361 i = tr_rd(tr, TR_REG_CIR, 4);
364 tr_wr(tr, TR_REG_CIR, i, 4);
370 struct tr_info *tr = ch->parent;
375 tr_wr(tr, bank? TR_REG_STARTB : TR_REG_STARTA, 1 << chan, 4);
381 struct tr_info *tr = ch->parent;
386 tr_wr(tr, bank? TR_REG_STOPB : TR_REG_STOPA, 1 << chan, 4);
392 struct tr_info *tr = ch->parent;
406 if (tr->type == ALI_PCI_ID)
415 switch (tr->type) {
432 snd_mtxlock(tr->lock);
435 tr_wr(tr, TR_REG_CHNBASE+(i<<2), cr[i], 4);
436 snd_mtxunlock(tr->lock);
442 struct tr_info *tr = ch->parent;
445 snd_mtxlock(tr->lock);
448 cr[i]=tr_rd(tr, TR_REG_CHNBASE+(i<<2), 4);
449 snd_mtxunlock(tr->lock);
451 if (tr->type == ALI_PCI_ID)
463 switch(tr->type) {
502 struct tr_info *tr = devinfo;
506 ch = &tr->chinfo[tr->playchns];
507 ch->index = tr->playchns++;
509 ch->parent = tr;
511 if (sndbuf_alloc(ch->buffer, tr->parent_dmat, 0, tr->bufsz) != 0)
611 struct tr_info *tr = devinfo;
615 ch = &tr->recchinfo;
617 ch->parent = tr;
619 if (sndbuf_alloc(ch->buffer, tr->parent_dmat, 0, tr->bufsz) != 0)
629 struct tr_info *tr = ch->parent;
635 tr_wr(tr, TR_REG_SBBL, i | (i << 16), 4);
638 tr_wr(tr, TR_REG_SBCTRL, i, 1);
647 struct tr_info *tr = ch->parent;
651 tr_wr(tr, TR_REG_SBDELTA, ch->delta, 2);
671 struct tr_info *tr = ch->parent;
679 tr_wr(tr, TR_REG_DMAR15, 0, 1);
680 i = tr_rd(tr, TR_REG_DMAR11, 1) & 0x03;
681 tr_wr(tr, TR_REG_DMAR11, i | 0x54, 1);
683 tr_wr(tr, TR_REG_DMAR0, sndbuf_getbufaddr(ch->buffer), 4);
685 i = tr_rd(tr, TR_REG_DMAR4, 4) & ~0x00ffffff;
686 tr_wr(tr, TR_REG_DMAR4, i | (sndbuf_runsz(ch->buffer) - 1), 4);
688 tr_wr(tr, TR_REG_SBCTRL, tr_rd(tr, TR_REG_SBCTRL, 1) | 1, 1);
691 tr_wr(tr, TR_REG_SBCTRL, tr_rd(tr, TR_REG_SBCTRL, 1) & ~7, 1);
703 struct tr_info *tr = ch->parent;
706 return tr_rd(tr, TR_REG_DMAR0, 4) - sndbuf_getbufaddr(ch->buffer);
733 struct tr_info *tr = (struct tr_info *)p;
738 intsrc = tr_rd(tr, TR_REG_MISCINT, 4);
741 while (chnum < tr->hwchns) {
743 active = tr_rd(tr, (chnum < 32)? TR_REG_ADDRINTA : TR_REG_ADDRINTB, 4);
744 bufhalf = tr_rd(tr, (chnum < 32)? TR_REG_CSPF_A : TR_REG_CSPF_B, 4);
749 if (chnum < tr->playchns) {
750 ch = &tr->chinfo[chnum];
764 tr_wr(tr, (chnum <= 32)? TR_REG_ADDRINTA : TR_REG_ADDRINTB, active, 4);
768 chn_intr(tr->recchinfo.channel);
769 tr_rd(tr, TR_REG_SBR9, 1);
770 tr_rd(tr, TR_REG_SBR10, 1);
781 tr_init(struct tr_info *tr)
783 switch (tr->type) {
785 tr_wr(tr, SPA_REG_GPIO, 0, 4);
786 tr_wr(tr, SPA_REG_CODECST, SPA_RST_OFF, 4);
789 tr_wr(tr, TDX_REG_CODECST, TDX_CDC_ON, 4);
792 tr_wr(tr, TNX_REG_CODECST, TNX_CDC_ON, 4);
796 tr_wr(tr, TR_REG_CIR, TR_CIR_MIDENA | TR_CIR_ADDRENA, 4);
824 struct tr_info *tr;
830 tr = malloc(sizeof(*tr), M_DEVBUF, M_WAITOK | M_ZERO);
831 tr->type = pci_get_devid(dev);
832 tr->rev = pci_get_revid(dev);
833 tr->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_t4dwave softc");
844 switch (tr->type) {
856 tr->regid = PCIR_BAR(0);
857 tr->regtype = SYS_RES_IOPORT;
858 tr->reg = bus_alloc_resource_any(dev, tr->regtype, &tr->regid,
860 if (tr->reg) {
861 tr->st = rman_get_bustag(tr->reg);
862 tr->sh = rman_get_bushandle(tr->reg);
868 if (tr_init(tr) == -1) {
872 tr->playchns = 0;
874 codec = AC97_CREATE(dev, tr, tr_ac97);
878 tr->irqid = 0;
879 tr->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &tr->irqid,
881 if (!tr->irq || snd_setup_intr(dev, tr->irq, 0, tr_intr, tr, &tr->ih)) {
886 if (tr->type == ALI_PCI_ID) {
898 tr->hwchns = ALI_MAXHWCH;
899 tr->bufsz = ALI_BUFSZ;
902 tr->hwchns = TR_MAXHWCH;
903 tr->bufsz = pcm_getbuffersize(dev, 4096, TR_DEFAULT_BUFSZ,
913 /*maxsize*/tr->bufsz, /*nsegments*/1, /*maxsegz*/tr->bufsz,
915 &tr->parent_dmat) != 0) {
921 rman_get_start(tr->reg), rman_get_start(tr->irq),
924 pcm_init(dev, tr);
925 pcm_addchan(dev, PCMDIR_REC, &trrchan_class, tr);
927 pcm_addchan(dev, PCMDIR_PLAY, &trpchan_class, tr);
935 if (tr->reg) bus_release_resource(dev, tr->regtype, tr->regid, tr->reg);
936 if (tr->ih) bus_teardown_intr(dev, tr->irq, tr->ih);
937 if (tr->irq) bus_release_resource(dev, SYS_RES_IRQ, tr->irqid, tr->irq);
938 if (tr->parent_dmat) bus_dma_tag_destroy(tr->parent_dmat);
939 if (tr->lock) snd_mtxfree(tr->lock);
940 free(tr, M_DEVBUF);
948 struct tr_info *tr;
954 tr = pcm_getdevinfo(dev);
955 bus_release_resource(dev, tr->regtype, tr->regid, tr->reg);
956 bus_teardown_intr(dev, tr->irq, tr->ih);
957 bus_release_resource(dev, SYS_RES_IRQ, tr->irqid, tr->irq);
958 bus_dma_tag_destroy(tr->parent_dmat);
959 snd_mtxfree(tr->lock);
960 free(tr, M_DEVBUF);
969 struct tr_info *tr;
971 tr = pcm_getdevinfo(dev);
973 for (i = 0; i < tr->playchns; i++) {
974 tr->chinfo[i].was_active = tr->chinfo[i].active;
975 if (tr->chinfo[i].active) {
976 trpchan_trigger(NULL, &tr->chinfo[i], PCMTRIG_STOP);
980 tr->recchinfo.was_active = tr->recchinfo.active;
981 if (tr->recchinfo.active) {
982 trrchan_trigger(NULL, &tr->recchinfo, PCMTRIG_STOP);
992 struct tr_info *tr;
994 tr = pcm_getdevinfo(dev);
996 if (tr_init(tr) == -1) {
1006 for (i = 0; i < tr->playchns; i++) {
1007 if (tr->chinfo[i].was_active) {
1008 trpchan_trigger(NULL, &tr->chinfo[i], PCMTRIG_START);
1012 if (tr->recchinfo.was_active) {
1013 trrchan_trigger(NULL, &tr->recchinfo, PCMTRIG_START);