Lines Matching refs:rdch
53 struct pcm_channel *rdch; member
99 static int dsp_oss_syncgroup(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_syncgroup *gro…
101 static int dsp_oss_policy(struct pcm_channel *wrch, struct pcm_channel *rdch, int policy);
102 static int dsp_oss_cookedmode(struct pcm_channel *wrch, struct pcm_channel *rdch, int enabled);
103 static int dsp_oss_getchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long lo…
104 static int dsp_oss_setchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long lo…
105 static int dsp_oss_getchannelmask(struct pcm_channel *wrch, struct pcm_channel *rdch, int *mask);
107 static int dsp_oss_getlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label);
108 static int dsp_oss_setlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label);
109 static int dsp_oss_getsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song…
110 static int dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song…
111 static int dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *name…
152 if (priv->rdch != NULL && DSP_F_READ(prio)) in dsp_lock_chans()
153 CHN_LOCK(priv->rdch); in dsp_lock_chans()
161 if (priv->rdch != NULL && DSP_F_READ(prio)) in dsp_unlock_chans()
162 CHN_UNLOCK(priv->rdch); in dsp_unlock_chans()
246 struct pcm_channel *rdch, *wrch, *parent; in dsp_close() local
264 rdch = priv->rdch; in dsp_close()
267 if (rdch != NULL) in dsp_close()
268 CHN_REMOVE(d, rdch, channels.pcm.opened); in dsp_close()
272 if (rdch != NULL || wrch != NULL) { in dsp_close()
274 if (rdch != NULL) { in dsp_close()
287 sg_ids = chn_syncdestroy(rdch); in dsp_close()
299 CHN_LOCK(rdch); in dsp_close()
300 chn_abort(rdch); /* won't sleep */ in dsp_close()
301 rdch->flags &= ~(CHN_F_RUNNING | CHN_F_MMAP | in dsp_close()
303 chn_reset(rdch, 0, 0); in dsp_close()
304 chn_release(rdch); in dsp_close()
305 if (rdch->flags & CHN_F_VIRTUAL) { in dsp_close()
306 parent = rdch->parentchannel; in dsp_close()
308 CHN_LOCK(rdch); in dsp_close()
309 vchan_destroy(rdch); in dsp_close()
444 error = dsp_chn_alloc(d, &priv->rdch, PCMDIR_REC, flags, td); in dsp_open()
451 CHN_INSERT_HEAD(d, priv->rdch, channels.pcm.opened); in dsp_open()
483 ch = &priv->rdch; in dsp_io_ops()
501 if (priv->rdch != NULL || priv->wrch != NULL) in dsp_io_ops()
562 struct pcm_channel *rdch, *wrch; in dsp_ioctl_channel() local
573 rdch = priv->rdch; in dsp_ioctl_channel()
577 if (j == SOUND_MIXER_RECLEV && rdch != NULL) in dsp_ioctl_channel()
578 ch = rdch; in dsp_ioctl_channel()
679 struct pcm_channel *chn, *rdch, *wrch; in dsp_ioctl() local
758 rdch = priv->rdch; in dsp_ioctl()
763 if (rdch != NULL && (rdch->flags & CHN_F_DEAD)) in dsp_ioctl()
764 rdch = NULL; in dsp_ioctl()
766 if (wrch == NULL && rdch == NULL) { in dsp_ioctl()
804 if (rdch) { in dsp_ioctl()
805 CHN_LOCK(rdch); in dsp_ioctl()
806 chn_setblocksize(rdch, 2, p->rec_size); in dsp_ioctl()
807 p->rec_size = sndbuf_getblksz(rdch->bufsoft); in dsp_ioctl()
808 CHN_UNLOCK(rdch); in dsp_ioctl()
822 if (rdch) { in dsp_ioctl()
823 CHN_LOCK(rdch); in dsp_ioctl()
824 p->rec_size = sndbuf_getblksz(rdch->bufsoft); in dsp_ioctl()
825 CHN_UNLOCK(rdch); in dsp_ioctl()
858 if (rdch) { in dsp_ioctl()
859 CHN_LOCK(rdch); in dsp_ioctl()
861 chn_setformat(rdch, in dsp_ioctl()
863 AFMT_CHANNEL(rdch->format), in dsp_ioctl()
864 AFMT_EXTCHANNEL(rdch->format))); in dsp_ioctl()
865 chn_setspeed(rdch, p->rec_rate); in dsp_ioctl()
867 p->rec_rate = rdch->speed; in dsp_ioctl()
868 p->rec_format = AFMT_ENCODING(rdch->format); in dsp_ioctl()
869 CHN_UNLOCK(rdch); in dsp_ioctl()
885 if (rdch) { in dsp_ioctl()
886 CHN_LOCK(rdch); in dsp_ioctl()
887 rcaps = chn_getcaps(rdch); in dsp_ioctl()
897 p->bufsize = min(rdch? sndbuf_getsize(rdch->bufsoft) : 1000000, in dsp_ioctl()
900 p->formats = (rdch? chn_getformats(rdch) : 0xffffffff) & in dsp_ioctl()
902 if (rdch && wrch) { in dsp_ioctl()
913 if (rdch) in dsp_ioctl()
914 CHN_UNLOCK(rdch); in dsp_ioctl()
924 } else if (*arg_i == AIOSYNC_CAPTURE && rdch) { in dsp_ioctl()
925 CHN_LOCK(rdch); in dsp_ioctl()
926 *arg_i = chn_abort(rdch); in dsp_ioctl()
927 CHN_UNLOCK(rdch); in dsp_ioctl()
943 if (rdch) { in dsp_ioctl()
944 CHN_LOCK(rdch); in dsp_ioctl()
948 *arg_i = sndbuf_getready(rdch->bufsoft); in dsp_ioctl()
949 CHN_UNLOCK(rdch); in dsp_ioctl()
962 if (rdch) { in dsp_ioctl()
963 CHN_LOCK(rdch); in dsp_ioctl()
965 rdch->flags |= CHN_F_NBIO; in dsp_ioctl()
967 rdch->flags &= ~CHN_F_NBIO; in dsp_ioctl()
968 CHN_UNLOCK(rdch); in dsp_ioctl()
986 chn = wrch ? wrch : rdch; in dsp_ioctl()
1005 if (rdch) { in dsp_ioctl()
1006 CHN_LOCK(rdch); in dsp_ioctl()
1007 chn_setblocksize(rdch, 2, *arg_i); in dsp_ioctl()
1008 CHN_UNLOCK(rdch); in dsp_ioctl()
1021 if (rdch) { in dsp_ioctl()
1022 CHN_LOCK(rdch); in dsp_ioctl()
1023 chn_abort(rdch); in dsp_ioctl()
1024 chn_resetbuf(rdch); in dsp_ioctl()
1025 CHN_UNLOCK(rdch); in dsp_ioctl()
1049 if (rdch && ret == 0) { in dsp_ioctl()
1050 CHN_LOCK(rdch); in dsp_ioctl()
1051 ret = chn_setspeed(rdch, *arg_i); in dsp_ioctl()
1053 tmp = rdch->speed; in dsp_ioctl()
1054 CHN_UNLOCK(rdch); in dsp_ioctl()
1061 chn = wrch ? wrch : rdch; in dsp_ioctl()
1083 if (rdch && ret == 0) { in dsp_ioctl()
1084 CHN_LOCK(rdch); in dsp_ioctl()
1085 ret = chn_setformat(rdch, in dsp_ioctl()
1086 SND_FORMAT(rdch->format, *arg_i, 0)); in dsp_ioctl()
1088 tmp = (AFMT_CHANNEL(rdch->format) > 1)? 1 : 0; in dsp_ioctl()
1089 CHN_UNLOCK(rdch); in dsp_ioctl()
1131 if (rdch && ret == 0) { in dsp_ioctl()
1132 CHN_LOCK(rdch); in dsp_ioctl()
1133 ret = chn_setformat(rdch, in dsp_ioctl()
1134 SND_FORMAT(rdch->format, *arg_i, ext)); in dsp_ioctl()
1136 tmp = AFMT_CHANNEL(rdch->format); in dsp_ioctl()
1137 CHN_UNLOCK(rdch); in dsp_ioctl()
1142 chn = wrch ? wrch : rdch; in dsp_ioctl()
1150 chn = wrch ? wrch : rdch; in dsp_ioctl()
1162 chn = wrch ? wrch : rdch; in dsp_ioctl()
1185 if (rdch && ret == 0) { in dsp_ioctl()
1186 CHN_LOCK(rdch); in dsp_ioctl()
1187 ret = chn_setformat(rdch, SND_FORMAT(*arg_i, in dsp_ioctl()
1188 AFMT_CHANNEL(rdch->format), in dsp_ioctl()
1189 AFMT_EXTCHANNEL(rdch->format))); in dsp_ioctl()
1191 tmp = rdch->format; in dsp_ioctl()
1192 CHN_UNLOCK(rdch); in dsp_ioctl()
1197 chn = wrch ? wrch : rdch; in dsp_ioctl()
1224 if (rdch) { in dsp_ioctl()
1225 CHN_LOCK(rdch); in dsp_ioctl()
1226 ret = chn_setblocksize(rdch, maxfrags, fragsz); in dsp_ioctl()
1227 r_maxfrags = sndbuf_getblkcnt(rdch->bufsoft); in dsp_ioctl()
1228 r_fragsz = sndbuf_getblksz(rdch->bufsoft); in dsp_ioctl()
1229 CHN_UNLOCK(rdch); in dsp_ioctl()
1259 if (rdch) { in dsp_ioctl()
1260 struct snd_dbuf *bs = rdch->bufsoft; in dsp_ioctl()
1262 CHN_LOCK(rdch); in dsp_ioctl()
1267 CHN_UNLOCK(rdch); in dsp_ioctl()
1294 if (rdch) { in dsp_ioctl()
1295 struct snd_dbuf *bs = rdch->bufsoft; in dsp_ioctl()
1297 CHN_LOCK(rdch); in dsp_ioctl()
1299 a->blocks = sndbuf_getblocks(bs) - rdch->blocks; in dsp_ioctl()
1301 rdch->blocks = sndbuf_getblocks(bs); in dsp_ioctl()
1302 CHN_UNLOCK(rdch); in dsp_ioctl()
1328 if (rdch && wrch && !(pcm_getflags(d->dev) & SD_F_SIMPLEX)) in dsp_ioctl()
1330 if (rdch && (rdch->flags & CHN_F_VIRTUAL) != 0) in dsp_ioctl()
1338 chn = wrch ? wrch : rdch; in dsp_ioctl()
1359 if (rdch) { in dsp_ioctl()
1360 CHN_LOCK(rdch); in dsp_ioctl()
1361 rdch->flags &= ~CHN_F_NOTRIGGER; in dsp_ioctl()
1363 chn_start(rdch, 1); in dsp_ioctl()
1365 chn_abort(rdch); in dsp_ioctl()
1366 chn_resetbuf(rdch); in dsp_ioctl()
1367 rdch->flags |= CHN_F_NOTRIGGER; in dsp_ioctl()
1369 CHN_UNLOCK(rdch); in dsp_ioctl()
1393 if (rdch) { in dsp_ioctl()
1394 CHN_LOCK(rdch); in dsp_ioctl()
1395 if (rdch->flags & CHN_F_TRIGGERED) in dsp_ioctl()
1397 CHN_UNLOCK(rdch); in dsp_ioctl()
1427 if (rdch && wrch && (pcm_getflags(d->dev) & SD_F_SIMPLEX)) in dsp_ioctl()
1440 chn = rdch; in dsp_ioctl()
1446 chn = rdch; in dsp_ioctl()
1591 chn = (cmd == SNDCTL_DSP_CURRENT_OPTR) ? wrch : rdch; in dsp_ioctl()
1610 chn = (cmd == SNDCTL_DSP_HALT_OUTPUT) ? wrch : rdch; in dsp_ioctl()
1630 if (rdch != NULL) { in dsp_ioctl()
1631 CHN_LOCK(rdch); in dsp_ioctl()
1632 rdch->lw = (*arg_i > 1) ? *arg_i : 1; in dsp_ioctl()
1633 CHN_UNLOCK(rdch); in dsp_ioctl()
1656 if (rdch != NULL) { in dsp_ioctl()
1657 CHN_LOCK(rdch); in dsp_ioctl()
1658 ei->rec_overruns = rdch->xruns; in dsp_ioctl()
1659 rdch->xruns = 0; in dsp_ioctl()
1660 CHN_UNLOCK(rdch); in dsp_ioctl()
1667 ret = dsp_oss_syncgroup(wrch, rdch, (oss_syncgroup *)arg); in dsp_ioctl()
1679 ret = dsp_oss_policy(wrch, rdch, *arg_i); in dsp_ioctl()
1686 ret = dsp_oss_cookedmode(wrch, rdch, *arg_i); in dsp_ioctl()
1691 ret = dsp_oss_getchnorder(wrch, rdch, (unsigned long long *)arg); in dsp_ioctl()
1696 ret = dsp_oss_setchnorder(wrch, rdch, (unsigned long long *)arg); in dsp_ioctl()
1701 ret = dsp_oss_getchannelmask(wrch, rdch, (int *)arg); in dsp_ioctl()
1714 chn = (cmd == SNDCTL_DSP_GETOPEAKS) ? wrch : rdch; in dsp_ioctl()
1738 ret = dsp_oss_getlabel(wrch, rdch, (oss_label_t *)arg); in dsp_ioctl()
1741 ret = dsp_oss_setlabel(wrch, rdch, (oss_label_t *)arg); in dsp_ioctl()
1744 ret = dsp_oss_getsong(wrch, rdch, (oss_longname_t *)arg); in dsp_ioctl()
1747 ret = dsp_oss_setsong(wrch, rdch, (oss_longname_t *)arg); in dsp_ioctl()
1750 ret = dsp_oss_setname(wrch, rdch, (oss_longname_t *)arg); in dsp_ioctl()
1779 struct pcm_channel *wrch, *rdch; in dsp_poll() local
1796 rdch = priv->rdch; in dsp_poll()
1804 if (rdch != NULL && !(rdch->flags & CHN_F_DEAD)) { in dsp_poll()
1807 ret |= chn_poll(rdch, e, td); in dsp_poll()
1836 struct pcm_channel *wrch, *rdch, *c; in dsp_mmap_single() local
1874 rdch = priv->rdch; in dsp_mmap_single()
1876 c = ((nprot & PROT_WRITE) != 0) ? wrch : rdch; in dsp_mmap_single()
1880 (rdch != NULL && (rdch->flags & CHN_F_MMAP_INVALID))) { in dsp_mmap_single()
1888 if (rdch != NULL) in dsp_mmap_single()
1889 rdch->flags |= CHN_F_MMAP; in dsp_mmap_single()
2150 if (DSP_REGISTERED(priv->sc) && (ch == priv->rdch || ch == priv->wrch)) in dsp_oss_engineinfo_cb()
2386 dsp_oss_syncgroup(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_syncgroup *group) in dsp_oss_syncgroup() argument
2419 if (rdch) { in dsp_oss_syncgroup()
2420 CHN_LOCK(rdch); in dsp_oss_syncgroup()
2421 sg_ids[1] = chn_syncdestroy(rdch); in dsp_oss_syncgroup()
2430 ((rdch == NULL) && (group->mode & PCM_ENABLE_INPUT))) { in dsp_oss_syncgroup()
2475 smrd->ch = rdch; in dsp_oss_syncgroup()
2477 chn_abort(rdch); in dsp_oss_syncgroup()
2478 rdch->flags |= CHN_F_NOTRIGGER; in dsp_oss_syncgroup()
2479 rdch->sm = smrd; in dsp_oss_syncgroup()
2510 if (rdch) in dsp_oss_syncgroup()
2511 rdch->sm = NULL; in dsp_oss_syncgroup()
2516 if (rdch) in dsp_oss_syncgroup()
2517 CHN_UNLOCK(rdch); in dsp_oss_syncgroup()
2667 dsp_oss_policy(struct pcm_channel *wrch, struct pcm_channel *rdch, int policy) in dsp_oss_policy() argument
2677 if (rdch) { in dsp_oss_policy()
2678 CHN_LOCK(rdch); in dsp_oss_policy()
2679 ret = chn_setlatency(rdch, policy); in dsp_oss_policy()
2680 CHN_UNLOCK(rdch); in dsp_oss_policy()
2718 dsp_oss_cookedmode(struct pcm_channel *wrch, struct pcm_channel *rdch, int enabled) in dsp_oss_cookedmode() argument
2744 if (rdch != NULL) { in dsp_oss_cookedmode()
2745 CHN_LOCK(rdch); in dsp_oss_cookedmode()
2746 rdch->flags &= ~CHN_F_BITPERFECT; in dsp_oss_cookedmode()
2747 rdch->flags |= (enabled != 0) ? CHN_F_BITPERFECT : 0x00000000; in dsp_oss_cookedmode()
2748 CHN_UNLOCK(rdch); in dsp_oss_cookedmode()
2772 dsp_oss_getchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long long *map) in dsp_oss_getchnorder() argument
2777 ch = (wrch != NULL) ? wrch : rdch; in dsp_oss_getchnorder()
2803 dsp_oss_setchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long long *map) in dsp_oss_setchnorder() argument
2815 if (ret == 0 && rdch != NULL) { in dsp_oss_setchnorder()
2816 CHN_LOCK(rdch); in dsp_oss_setchnorder()
2817 ret = chn_oss_setorder(rdch, map); in dsp_oss_setchnorder()
2818 CHN_UNLOCK(rdch); in dsp_oss_setchnorder()
2825 dsp_oss_getchannelmask(struct pcm_channel *wrch, struct pcm_channel *rdch, in dsp_oss_getchannelmask() argument
2833 ch = (wrch != NULL) ? wrch : rdch; in dsp_oss_getchannelmask()
2872 dsp_oss_getlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label) in dsp_oss_getlabel() argument
2896 dsp_oss_setlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label) in dsp_oss_setlabel() argument
2921 dsp_oss_getsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song) in dsp_oss_getsong() argument
2946 dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song) in dsp_oss_setsong() argument
2975 dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *name) in dsp_oss_setname() argument